c++ - c++ unix 多线程套接字阻塞和非阻塞。什么是阻塞?

标签 c++ multithreading sockets unix

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

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

最佳答案

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

非阻塞调用在信息被缓冲以供传输或读取操作启动后立即返回。在没有数据依赖性时使用它们。

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

关于c++ - c++ unix 多线程套接字阻塞和非阻塞。什么是阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961424/

相关文章:

c++ - 从十六进制数组中读取 Int

c++ - 运行代码时无法输入值

c++ - 将 32 位 float 打包成 30 位 (c++)

创建一个自动终止的主函数

c++ - wxSmith 管理wxPanel的好方法

java - 如何协调两个后台任务?

.net - 带有取消 token 的 NetworkStream.ReadAsync 永远不会取消

c++ - 在 C++ 代码中重新启动连接时出现“断管”错误

C++ 套接字接受 block cout

c# - ReaderWriterLockSlim 出错