Jonathan M Davis Wrote:

> On Friday, September 23, 2011 23:01:17 Jerry Quinn wrote:
> 
> A direct rewrite would involve using shared and synchronized (either on the 
> class or a synchronized block around the code that you want to lock). 
> However, 
> the more idiomatic way to do it would be to use std.concurrency and have the 
> threads pass messages to each other using send and receive.

I'm trying the direct rewrite but having problems with shared and synchronized.

class queue {
  File file;
  this(string infile) {
    file.open(infile);
  }
  synchronized void put(string s) {
    file.writeln(s);
  }
}

queue.d(10): Error: template std.stdio.File.writeln(S...) does not match any 
function template declaration
queue.d(10): Error: template std.stdio.File.writeln(S...) cannot deduce 
template function from argument types !()(string)

Remove the synchronized and it compiles fine with 2.055.


> So, what you'd probably do is spawn 3 threads from the main thread. One would 
> read the file and send the data to another thread. That second thread would 
> process the data, then it would send it to the third thread, which would 
> write 
> it to disk.

I think that would become messy when you have multiple processing threads.  The 
reader and writer would have to handshake with all the processors.


> Unfortunately, I'm not aware of any good code examples of this sort of thing 
> online. TDPL has some good examples, but obviously you'd have to have the 
> book 
> to read it. Given some time, I could probably cook up an example, but I don't 
> have anything on hand.

std.parallelism actually looks the closest to what I want.  Not sure if I can 
make it work easily though.

Reply via email to