Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-dev] core.resources Concurrency Model

Hi Mickael,
b) has some magic synchronization which i dont see

It could be a bit of all ;)

I found some magic synchronization. Actually parallel write is avoided in

org.eclipse.core.internal.resources.File.create(InputStream, int, IProgressMonitor){
    ...
    workspace.prepareOperation  // global(!) lock
    ... (actual write) ...
    workspace.endOperation(rule, true); // global unlock
    ...
}

Daemon Thread [ForkJoinPool-1-worker-3] (Suspended)   
    waiting for: Semaphore  (id=374)   
    Object.wait(long) line: not available [native method]   
    Semaphore.acquire(long) line: 44   
    OrderedLock.doAcquire(Semaphore, long) line: 173
    OrderedLock.acquire(long) line: 109   
    OrderedLock.acquire() line: 85   
    WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 125       <------------- a global lock
    Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line: 2263   
    File.create(InputStream, int, IProgressMonitor) line: 106   
    ConcurrentModificationTest.writeClassFileContents(IFile, String) line: 97   
...

Thats probably a (or the?) reason you see only little speedup during parallel builds.

Can you please elaborate about a concrete case you think can be faulty with current code? Ideally in a test case you could submit through Gerrit?

see https://git.eclipse.org/r/c/platform/eclipse.platform.resources/+/179934

Jörg

Back to the top