当您有一组管道/套接字等待读/写时,可以使用epoll()或select()来等待所有管道/套接字,直到至少有一个管道/套接字准备好读/写。
线程/pthread有没有类似的东西?我做过的最接近的事情就是通过阻塞互斥锁的lock()来创建一个休眠线程。但是,这会为每个锁消耗一个线程。
我也考虑过使用管道而不是这些锁,但它似乎效率也很低,管道数量似乎被限制在大约500个管道(至少它比线程高一点)。
所以,有没有比使用线程等待互斥锁更好的解决方案呢?
发布于 2014-06-13 08:55:13
eventfd可能对您有用。它们的工作方式应该与您的管道相同,但开销要小得多。
如果您达到了1024个打开文件的限制,您可以使用ulimit将其增加到您想要的数量。但是,如果您有许多锁,则应该更明智地使用eventfd。
发布于 2011-07-22 15:43:36
我不知道有这样的方法,但您可能需要重新考虑导致此类问题的设计。如果您正在尝试等待大量互斥锁以未指定的顺序可用(可能会在进程中锁定其中的一些互斥锁),那么就餐哲学家的问题似乎很可能就在转角处。
如果这不是问题所在,那么条件变量可能就是解决问题的方法。
发布于 2011-07-22 20:58:02
也许你正在寻找条件变量。请参阅pthread_cond_init、pthread_cond_wait和pthread_cond_signal的手册页。
如果一个线程调用pthread_cond_wait(cond),它会一直等到第二个线程调用pthread_cond_signal(cond)
https://stackoverflow.com/questions/6786234
复制相似问题