2

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

4

2 回答 2

1

你真的需要挂起线程吗?如果我理解你是正确的,你正在尝试解决读者作家问题。在这种情况下,我建议 pthread_rwlock_t 为您的控制线程提供对共享内存的独占访问。

于 2013-07-22T09:51:50.537 回答
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.

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

如果您有一个易于理解您的问题的代码。

于 2013-07-22T09:31:18.533 回答