首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >epoll/select表示互斥锁/信号量

问epoll/select表示互斥锁/信号量
EN

Stack Overflow用户
提问于 2011-07-22 14:07:06
回答 3查看 3.2K关注 0票数 1

当您有一组管道/套接字等待读/写时,可以使用epoll()或select()来等待所有管道/套接字,直到至少有一个管道/套接字准备好读/写。

线程/pthread有没有类似的东西?我做过的最接近的事情就是通过阻塞互斥锁的lock()来创建一个休眠线程。但是,这会为每个锁消耗一个线程。

我也考虑过使用管道而不是这些锁,但它似乎效率也很低,管道数量似乎被限制在大约500个管道(至少它比线程高一点)。

所以,有没有比使用线程等待互斥锁更好的解决方案呢?

EN

回答 3

Stack Overflow用户

发布于 2014-06-13 08:55:13

eventfd可能对您有用。它们的工作方式应该与您的管道相同,但开销要小得多。

如果您达到了1024个打开文件的限制,您可以使用ulimit将其增加到您想要的数量。但是,如果您有许多锁,则应该更明智地使用eventfd。

这里有更多信息:http://man7.org/linux/man-pages/man2/eventfd.2.html

票数 5
EN

Stack Overflow用户

发布于 2011-07-22 15:43:36

我不知道有这样的方法,但您可能需要重新考虑导致此类问题的设计。如果您正在尝试等待大量互斥锁以未指定的顺序可用(可能会在进程中锁定其中的一些互斥锁),那么就餐哲学家的问题似乎很可能就在转角处。

如果这不是问题所在,那么条件变量可能就是解决问题的方法。

票数 1
EN

Stack Overflow用户

发布于 2011-07-22 20:58:02

也许你正在寻找条件变量。请参阅pthread_cond_init、pthread_cond_wait和pthread_cond_signal的手册页。

如果一个线程调用pthread_cond_wait(cond),它会一直等到第二个线程调用pthread_cond_signal(cond)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6786234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档