On Wednesday, November 14, 2012 18:59:29 Joseph Rushton Wakeling wrote: > On 11/14/2012 06:49 PM, Vijay Nayar wrote: > > Could you put the file access in a synchronized block? > > > > http://dlang.org/statement.html#SynchronizedStatement > > Oh, good call -- seems to work.
I would point out though that given how expensive disk writes are, unless you're doing a lot of work within the parallel foreach loop, there's a good chance that it would be more efficient to use std.concurrency and pass the writes to another thread to do the writing. And the loop itself should still be able to be a parallel foreach, so you wouldn't have to change much otherwise. But with the synchronized block, you'll probably end up with each thread spending a lot of its time waiting on the lock, which will end up making the whole thing effectively single-threaded. If the work being done in the parallel foreach is small enough, it might even be the case that simply making it a normal foreach and ditching the synchronized block would be faster. But you'll obviously have to experiment to see what works best with whatever you're doing. - Jonathan M Davis