C 文件描述符、轮询和线程

标签 c linux sockets posix

假设我有几个要监控的套接字。如果我在每个文件描述符上创建 POSIX 文件描述符并为每个文件描述符结构分配一个事件处理程序,我是否需要为每个套接字创建和分配线程?

我的理解是,每当定义的文件描述符上发生事件时,都会调用其事件处理函数。所以不需要线程。我对吗?

最佳答案

“我需要为每个套接字创建并分配线程吗?”这个问题的简单答案没有”。线程是搬起石头砸自己脚的完美方式。

但请看这部分:“[...] 每当定义的文件描述符上发生事件时,其事件处理函数将被调用 [...]”。现在回答以下问题: 将调用事件处理程序? 如何您的程序会注意到事件发生了?

当然,您可以为每个描述符创建每个线程,然后使用例如“坐在”它们上面阻塞读取功能。然后在尝试与您的主线程同步时惨死。

但更好的解决方案是让您的主循环步骤之一来检查事件(例如使用selectpoll 函数),然后,对于每个“事件”的描述符,从主循环调用它的处理程序。如果处理程序中的处理不耗时,您可以与线程保持安全距离。

关于C 文件描述符、轮询和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35069712/

相关文章:

c++ - 在函数顶部或单独的范围内声明变量?

c - C:将数组传递给函数并在接收者函数中进行迭代

linux - 更改 Ctrl + w 的 Vim 键盘映射

MySQL - 大表的基本问题

linux - AF-XDP : Is there a bug regarding small packets?

Java 套接字 : Read/receive the same instance multiple times after change values: ObjectInputStream. readObject()

c - 一小时后 PING 超时

c - 从用户处读取c中的字符

c++ - linux下c/c++的加密库和压缩库

linux - 选择系统调用在 n/w 应用程序中无限期挂起。