c++ - eventfd_read/write 与 sem_wait/post

标签 c++ c linux semaphore

在 Linux 上,在 C/C++ 程序中,如果我不关心我的 eventfd 是否被用于“select”,那么使用 eventfd_read/write(带有 EFD_SEMAPHORE 标志)还是 sem_wait/post 更好?

  • 是否存在任何性能、可靠性和可移植性问题?
  • 由于我的程序使用了一些其他的 eventfd 对象(带有“select”),我认为使用 eventfd 比使用 sem_wait/post 更一致。

最佳答案

sem_wait/sem_post 完全是用户空间,除非 sem_wait block 或 sem_post 发布到具有服务员。即使那样,它们执行的系统调用也是内核中一些最快的路径。

另一方面,任何使用文件描述符和 io 进行同步的东西都充满了系统调用,由于 io 的巨大复杂性,它们是内核中最慢的一些路径。

如果您不需要 select 并且无论如何您正在编写多线程或多进程代码,我认为选择使用信号量而不是 eventfd 是一个明智的选择(即对于那些不熟悉俚语的人来说,这是显而易见的选择).

关于c++ - eventfd_read/write 与 sem_wait/post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826919/

相关文章:

c++ - 对于不可复制类型的范围循环,是否可能?

c++ - 我什至无法使用 wxWidgets 示例进行编译

C++:如果我重载 new 运算符,我是否也必须重载 delete 运算符?

ruby - 在 CentOS 中安装 ruby​​ fastCGI 绑定(bind)时出错。如何避免~>_<~

c - 我如何在 Linux 中授予对文件的写权限?

c++ - 使用 MySql 数据库打包 C++ 应用程序

c - 如何让 GCC 正常工作?

c++ - Char 数组无法将字符保存为其成员。使用ATmega8的密码系统

c - 十进制到二进制转换器,控制台无响应

linux - IO 操作 - 为什么不 cd?