我正在使用Linux和Win32套接字API。在我的程序中,多个线程共享一个套接字句柄。特别地,多个线程使用共享的套接字句柄(即,相同的端口)调用send
。在这种情况下,我是否必须锁定线程安全性?我无法找到答案。我可以做一个测试,但想听听你的经验。C socket API是线程安全的吗?
EDIT:我知道通过套接字发送数据根本不是原子操作。当然,我们必须使用互斥体来保证线程安全。但是,我想知道系统API是否可以拥有自己的内部锁。如果是这样,我们可以省略把自己的锁。
此问题也适用于fprintf
函数。我想知道这样的系统API会拥有自己的锁。根据我的经验,从多个线程调用fprintf
并没有杀死我的程序,尽管文件或stdout上有比赛(即不一致或不可预知的输出,但程序没有崩溃),这暗示fprintf
有一个锁来保护它们的内部数据结构。
在我看来,多线程读取和写入同一个套接字是事实上的设计问题。 – theMayer 2018-02-12 20:10:33