【发布时间】:2014-04-24 19:33:48
【问题描述】:
我正在寻找可以在 C/C++ 中用于轮询的东西(如 select、kqueue、epoll 即不是忙轮询) .换句话说,我需要阻塞一个线程,然后在另一个线程中以尽可能少的开销唤醒它。
mutex + condition variable 有效,但开销很大。 futex 也可以,但这仅适用于 Linux(或者可能不是?)。只要 polling 本身正常工作,就不需要额外的同步,例如当我在两个线程中调用 wait 和 wake 时没有比赛。
编辑:如果 FreeBSD 中不存在这样的“工具”,如何使用 C++11 内置类型和系统调用创建一个?
Edit2:由于这个问题已迁移到 SO,我想让它更通用(仅适用于 FreeBSD)
【问题讨论】:
-
您是否还需要阻止多个来源,还是只阻止一个?
select、poll等通常用于(解)多路复用多个 fd,而不仅仅是阻塞一个。 -
@Useless One 已经足够好了。你是对的,
select不是一个很好的例子。我提到它只是为了说明我不想忙着等待 -
迁移后,我对这个问题的“目标”感到困惑。您是否正在寻找适用于 FreeBSD、POSIX 或标准 C++11 的答案?
-
@MichaelBurr 我正在使用具有 POSIX 和 C++11 的 FreeBSD。所以我打开了所有这三个选项
-
@GuLearn 你能找到相关的吗?
标签: c++ c multithreading