在Linux上,在C/C++程序中,如果我不关心在“选择”中使用eventfd的话,最好使用eventfd_read/write(带有EFD_SEMAPHORE标志)或sem_wait/post?

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

    sem_wait/sem_post完全是用户空间,除非sem_wait块或sem_post发布到具有侍者的信号灯上。即使这样,它们执行的syscall还是内核中最快的路径。

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

    如果您不需要select并且无论如何都在编写多线程或多进程代码,我认为使用信号量而不是eventfd的选择是轻而易举的事情(即对于不熟悉语的人来说是显而易见的选择)。

    10-08 07:02