作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我同时使用 Linux 和 Win32 套接字 API。在我的程序中,多个线程共享一个套接字句柄。特别是,多个线程使用共享套接字句柄(即相同的端口)调用 send
。在这种情况下,我是否必须为线程安全加锁?我无法找到答案。我可能会做一个测试,但想听听你的经验。
编辑:我知道通过套接字发送数据根本不是原子操作。当然,我们必须使用互斥锁来保证线程安全。但是,我想知道系统 API 是否可以有自己的内部锁。如果是这样,我们可以省略自己的锁。
这个问题也可能适用于 fprintf
函数。我想知道这样的系统 API 会有自己的锁。根据我的经验,从多个线程调用 fprintf
并没有杀死我的程序,尽管文件或标准输出存在竞争(即不一致或不可预测的输出,但程序没有崩溃),这意味着 fprintf
有一个锁来保护它们的内部数据结构。
最佳答案
套接字不是 C++ 标准的一部分,因此它取决于实现。通常它们不是线程安全的,因为 send
不是原子操作。查看 this discussion了解更多信息。
编辑:操作系统可能有或不能有内部锁来保护内部结构。这取决于实现。所以你不应该指望它。
关于c++ - C套接字API是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354417/
我是一名优秀的程序员,十分优秀!