【发布时间】:2011-07-22 06:07:05
【问题描述】:
当您有一组管道/套接字等待读/写时,可以使用 epoll() 或 select() 等待所有这些管道/套接字,直到其中至少一个准备好进行读/写。
threads/pthreads 有什么类似的吗?我最接近的方法是通过阻塞互斥锁的 lock() 来创建一个休眠线程。但是,这会为每个锁花费一个线程。
我也想过用管道代替这些锁,但也似乎效率低下,而且管道数似乎限制在 500 条左右(至少比线程高一点)。
是的,有没有比使用线程等待互斥锁解锁更好的解决方案?
【问题讨论】:
-
我不确定您的要求 - 等待线程执行.. 什么?如果您只想等到某个线程在其执行中到达某个点,您可以只发出一个常见的、单个事件或信号量的信号,正如您在标题中暗示的那样。一个事件会告诉你至少一个线程已经到达你的触发点,一个信号量可以让你知道有多少线程已经到达那里。在任何一种情况下,您都可以迭代线程(线程中的“就绪”布尔值),以找出哪些线程处于触发点。你能再清楚一点吗?你的要求?
标签: multithreading asynchronous