Pithikos / C-Thread-Pool

A minimal but powerful thread pool in ANSI C
MIT License
2.06k stars 603 forks source link

No synchronization with main thread. #2

Closed stolk closed 9 years ago

stolk commented 9 years ago

Interesting library, and would use this, but:

It seems to be missing important synchronization functionality. There is no mechanism provided that will let the main thread go to sleep until a job queue is empty.

A typical use in multi-threaded programming would be:

Such a mechanism could be provided by pthread_barrier_t but unfortunately, this is not part of POSIX, and is lacking in OSX.

Pithikos commented 9 years ago

Hi,

you were right and I have been implementing what you stated (which was much much hard btw). You can now use the function wait() after you added your work to wait for the work to finish. Here is an example.

Also there are the functions thpool_pause() and thpool_resume() which will pause and resume the whole threadpool regardless what they are doing. This can be of use if you are having some complex system with many threadpools for example. thpool_wait() will initially poll with 0 interval for one second. After that the polling will grow exponentially until reaching the max pollling interval (by default 20 seconds). After that it will fall back into very simple polling of 20 seconds, to save as many cycles as possible for the actual work.