在我的多线程应用程序中,我使用AF_UNIX类型的套接字。默认情况下似乎是阻塞。问题是什么意思是“阻止”?是否在应用程序上执行::recv
或::send
调用或所有线程时阻止主题(如fgets
所做) ?
如果它阻止所有线程/整个应用程序,我想需要使用非阻塞套接字?如果是这样,请举例说明如何设置AF_UNIX非阻塞套接字以及何时需要设置非阻塞模式(以及如何设置)。如何::recv
?感谢。
答案 0 :(得分:5)
阻止调用使线程等待操作完成。在操作完成之前线程无法继续时使用它们,例如由于数据依赖于正在接收的输入。
一旦缓冲信息进行传输,或者启动读取操作,非阻塞调用就会返回。在没有数据依赖性时使用它们。
通常,阻塞总是意味着“阻止当前线程”,而不是“阻止我进程中的所有线程。”
答案 1 :(得分:4)
它只阻止进行 recv 调用的线程。