当您有一组等待读/写的管道/套接字时,可以使用 epoll() 或 select() 等待所有这些,直到至少其中一个准备好读/写。
threads/pthreads 是否有类似的东西?我最接近的做法是通过阻塞互斥体的 lock() 来创建一个 sleep 线程。但是,这会为每个锁花费一个线程。
我也想过用管道代替这些锁,但也显得效率低下,而且管道数似乎限制在500个左右(至少比线程高一点)。
是的,有没有比在等待互斥体解锁时使用线程更好的解决方案?
最佳答案
eventfd
可能对您有用。它们的工作方式应该与您的管道相同,但开销要小得多。
如果您达到 1024 个打开文件的限制,您可以使用 ulimit 将其增加到您想要的数量。但是,如果您有很多锁,则应该更智能地使用 eventfd。
关于multithreading - epoll/select 用于互斥量/信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6786234/