2

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

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

4

2 回答 2

5

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

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

一般来说,阻塞总是意味着“阻塞当前线程”,而不是“阻塞我进程中的所有线程。

于 2012-06-09T13:32:40.230 回答
4

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

于 2012-06-09T13:27:23.277 回答