在我的多线程应用程序中,我使用 AF_UNIX 类型的套接字。默认情况下似乎是阻塞的。问题是“阻塞”是什么意思?当它执行::recv
或::send
调用或所有线程 时,它是否阻塞线程应用程序(像 fgets
那样)?
如果它阻塞所有线程/整个应用程序,我猜需要使用非阻塞套接字吗?如果是这样,请给出一个很好的例子,说明如何设置 AF_UNIX 非阻塞套接字以及何时需要设置非阻塞模式(以及如何)。如何 ::recv
?谢谢。
最佳答案
阻塞调用使线程等待操作完成。当您的线程在操作完成之前无法继续时使用它们,例如由于数据依赖于正在接收的输入。
非阻塞调用在信息被缓冲以供传输或读取操作启动后立即返回。在没有数据依赖性时使用它们。
一般来说,阻塞总是意味着“阻塞当前线程”,而不是“阻塞我进程中的所有线程”。
关于c++ - c++ unix 多线程套接字阻塞和非阻塞。什么是阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961424/