【问题标题】:A control thread suspends and resumes a group of worker threads控制线程挂起和恢复一组工作线程
【发布时间】:2013-07-20 22:56:17
【问题描述】:

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

【问题讨论】:

  • 我可以看到一个点列表,但没有真正的问题。你想要什么,你已经尝试过什么?但我的建议是查找消息队列或/和 pthread_cond_signal
  • @hetepeperfan:感谢您的回复!我真正想要的是如何实现:一个控制线程挂起和恢复一组工作线程。您的建议:查找消息队列或/和 pthread_cond_signal。能详细解释一下吗?

标签: c unix pthreads


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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.
    

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

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

    【讨论】:

    • 感谢您的回复,但我认为这不是我想要的答案。
    • @NanXiao :编辑答案
    猜你喜欢
    • 2014-06-17
    • 1970-01-01
    • 2012-05-20
    • 2011-07-09
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2023-03-22
    • 2012-01-17
    相关资源
    最近更新 更多