gpt4 book ai didi

c++ - C套接字API是线程安全的吗?

转载 作者:IT老高 更新时间:2023-10-28 22:39:17 25 4
gpt4 key购买 nike

我同时使用 Linux 和 Win32 套接字 API。在我的程序中,多个线程共享一个套接字句柄。特别是,多个线程使用共享套接字句柄(即相同的端口)调用 send。在这种情况下,我是否必须为线程安全加锁?我无法找到答案。我可能会做一个测试,但想听听你的经验。

编辑:我知道通过套接字发送数据根本不是原子操作。当然,我们必须使用互斥锁来保证线程安全。但是,我想知道系统 API 是否可以有自己的内部锁。如果是这样,我们可以省略自己的锁。

这个问题也可能适用于 fprintf 函数。我想知道这样的系统 API 会有自己的锁。根据我的经验,从多个线程调用 fprintf 并没有杀死我的程序,尽管文件或标准输出存在竞争(即不一致或不可预测的输出,但程序没有崩溃),这意味着 fprintf 有一个锁来保护它们的内部数据结构。

最佳答案

套接字不是 C++ 标准的一部分,因此它取决于实现。通常它们不是线程安全的,因为 send 不是原子操作。查看 this discussion了解更多信息。

编辑:操作系统可能有或不能有内部锁来保护内部结构。这取决于实现。所以你不应该指望它。

关于c++ - C套接字API是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com