【发布时间】:2013-07-28 23:46:35
【问题描述】:
我正在考虑使用信号量作为工作线程池的暂停机制,如下所示:
// 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 联系起来以获取工作:我的工作人员等待所需的文件副本,而您看到的 while 循环正在执行请求的工作。你可以把我上面的 do_work 想象成 do_piece_of_work。
【问题讨论】: