AF_UNIX套接字发送线程安全吗
Is AF_UNIX socket send thread safe?
环顾四周,但找不到任何链接来证明AF_UNIX套接字的答案。
我的实现是在linux系统上实现的,我有一个AF_UNIX SOCK_STREAM套接字,
- 这个插座上有一个接收器螺纹
- 很少有工作线程可以在此套接字上调用"send()"
我的问题是-AF_UNIX套接字"send()"线程安全吗?如果我在AF_UNIX套接字fd上有并行/并发调用send的线程,内核会负责同步吗
我浏览了多个链接,但所有链接都与TCP/UDP(AF_INET)套接字有关,因此,如果有人能提出一个证明答案正确的链接,或者能深入了解内核代码,那将是非常有帮助的。
POSIX指定它定义的所有函数都必须是线程安全的,除了特定异常列表中的函数。send(2)
函数由POSIX定义,不包括在异常列表中。由于send(2)
的Linux实现声称符合POSIX规范,因此可以依赖它来实现线程安全。
通常,读或写等操作都是原子操作。但在管道或插座上,情况就不同了。
对于管道,POSIX(但我怀疑Linux在这一点上是兼容的)指出,只有当长度小于PIPE_BUF
时,才能保证并发写入不会交错。请参阅POSIX写入。
对于套接字,send
系列函数的Linux手册中写道:
当消息不适合于套接字的发送缓冲器时,send()通常会阻塞,除非套接字已放置在非阻塞I/O模式。
这表明内核可能send
将您的消息分解为多个部分,就像管道语义一样。
关于这个问题,有一个提供的答案是发送原子?。
相关文章:
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 在std::thread中,joinable()然后join()线程安全吗
- 在c++队列中使用pop和visit实现线程安全
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 线程安全运算符<<
- 如何使缓存线程安全
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 提升精神 V2 Qi 语法线程安全吗?
- asio 链对象线程安全吗?
- 线程安全队列 c++
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 如何以线程安全的方式更改目录?
- 线程安全的引用计数队列C++
- 析构函数和线程安全
- 适用于大型数组的无复制线程安全环形缓冲区