I am getting started with threads (linux/cthreads) and I'm very happy so far, but unsure of the best way to tackle my situation.
I have a program that needs to perform about 10,000 independent tasks, which usually involve waiting for I/O; thus it makes sense to use several threads so that some waiting can be done in parallel. I thought I'd try it with 10 threads. When a thread completes its task, I'd like it to simply request a new task from the queue. The best way I could think to do this was to have a task assignment function (which accesses a global variable and returns a task id, marking it as pending.) But how can I prevent race conditions? If threads X and Y happen to call the task assignment function at the same time, it seems to me that they could both be assigned to the same task. I know that this is a problem which has been addressed at great length in the computer science world ... so what's the easiest way for me to address it here and now? While writing this message it dawned on me that I probably need an event loop (I'm writing a console app) which will, e.g., sleep for 1 second and then check on the status of each thread's work. Then the main loop can assign a new task by starting a new thread, whenever it finds one that is finished. That puts the assignment task back in the main loop where there is no race condition. Do I even need to send this message? It would be nice to get a little input and see if I'm on the right track :) Cheers, David _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal