代码之家  ›  专栏  ›  技术社区  ›  johnnycrash

linux pthread\u挂起

  •  9
  • johnnycrash  · 技术社区  · 14 年前

    看起来linux没有实现pthread\u suspend and continue,但我真的需要它们。

    我试过等一下,但太慢了。被线程化的工作大部分在50us内执行,但偶尔执行500毫秒以上。cond\u wait的问题是双重的。互斥锁的执行时间与微秒执行时间相当,我不需要锁。第二,我有很多工作线程,当需要唤醒它们时,我不想创建N个条件变量。

    我确切地知道哪个线程正在等待哪个工作,可以pthread\u继续那个线程。线程知道什么时候没有更多的工作,可以轻松地pthread\u挂起自己。这将使用无锁,避免踩踏,更快。问题是…没有pthread挂起或继续。

    5 回复  |  直到 14 年前
        1
  •  8
  •   jweyrich    14 年前
        2
  •  3
  •   Amardeep AC9MF    14 年前

    如果特定数据需要转到特定线程,则每个线程需要一个管道。如果任何线程可以处理任何数据,那么所有线程都可以阻塞在同一个管道上,它们将唤醒循环。

        3
  •  0
  •   caf    14 年前

    在我看来,这样的解决方案(即使用“pthread\u suspend”和“pthread\u continue”)不可避免地很有活力。

    (请注意,这不适用于允许“continue”排队的挂起方法,如 sigwait() read() 其他答案中提到的方法)。

        4
  •  0
  •   Yusuf    14 年前

    可以尝试pthread\u cancel选项,但要小心,如果要释放任何锁,请阅读手册页以确定取消状态

        5
  •  0
  •   David Schwartz    13 年前