控制线程挂起并恢复一组工作线程

时间:2013-07-22 09:10:24

标签: c unix pthreads

正在进行控制线程和一组工作线程。工作模式喜欢这样:
(1)所有工作线程和控制线程都在运行;
(2)当控制线程检查某些条件变化时,它暂停所有工作线程;
(3)检查所有工作线程被挂起后,控制线程修改内存中的一些内容;
(4)修改后,控制线程恢复所有工作线程 我的问题是:
(1)在步骤2和步骤4中,如何控制线程暂停和恢复所有工作线程?我考虑使用pthread_cond_wait和pthread_cond_signal,但似乎只适用于控制线程和工作线程。
(2)在步骤3中,如何控制线程检查所有工作线程是否被挂起?我考虑使用计数器,有什么好方法吗?

2 个答案:

答案 0 :(得分:1)

In step 2 and step 4, how can control thread suspend and resume all worker threads? I consider using pthread_cond_wait and pthread_cond_signal, but it seems only OK for a control thread and a worker thread.

您可以为pthread中的线程分配优先级,并且可以为控制线程分配更高的优先级,并安排控制线程首先工作并使其他线程等待。

 After checking all worker threads are suspended, the control thread modifies some contents in memory.

是共享内存吗?如果是共享内存,则可以使用互斥锁,以允许一个线程一次访问关键部分。

如果您的代码很容易理解您的问题。

答案 1 :(得分:1)

你真的需要暂停线程吗?如果我理解你是对的,那么你正试图解决Readers writers problem。在这种情况下,我建议使用pthread_rwlock_t来提供对控制线程的共享内存的独占访问。