我正在考虑使用信号量作为工作线程池的暂停机制,如下所示:
// main thread
for N jobs:
semaphore.release()
create and start worker
// worker thread
while (not done)
semaphore.acquire()
do_work
semaphore.release()
现在,如果我想暂停所有工作人员,我可以获取信号量中可用的全部计数。我想知道它比:
if (paused)
paused_mutex.lock
wait for condition (paused_mutex)
do_work
还是有更好的解决方案?
我想用信号量做的一个缺点是主线程将阻塞,直到所有工作人员都释放。就我而言,每次迭代的工作单元非常小,因此可能不会成为问题。
更新:澄清一下,我的工作人员是充当文件副本的数据库备份。当文件被成功复制时,while(not quit) 循环退出。因此,将其与传统的 worker-waits-for-condition 联系起来以获取工作:我的 worker 等待所需的文件副本,而您看到的 while 循环正在执行请求的工作。你可以把我上面的 do_work 想象成 do_piece_of_work。