cpp unix多线程套接字阻塞和非阻塞。阻塞什么?

时间:2012-06-09 13:24:52

标签: c++ multithreading sockets unix

在我的多线程应用程序中,我使用AF_UNIX类型的套接字。默认情况下似乎是阻塞。问题是什么意思是“阻止”?是否在应用程序上执行::recv::send调用或所有线程时阻止主题(如fgets所做) ?

如果它阻止所有线程/整个应用程序,我想需要使用非阻塞套接字?如果是这样,请举例说明如何设置AF_UNIX非阻塞套接字以及何时需要设置非阻塞模式(以及如何设置)。如何::recv?感谢。

2 个答案:

答案 0 :(得分:5)

阻止调用使线程等待操作完成。在操作完成之前线程无法继续时使用它们,例如由于数据依赖于正在接收的输入。

一旦缓冲信息进行传输,或者启动读取操作,非阻塞调用就会返回。在没有数据依赖性时使用它们。

通常,阻塞总是意味着“阻止当前线程”,而不是“阻止我进程中的所有线程。”

答案 1 :(得分:4)

它只阻止进行 recv 调用的线程。