我正在使用Linux和Win32套接字API。在我的程序中,多個線程共享一個套接字句柄。特別地,多個線程使用共享的套接字句柄(即,相同的端口)調用send
。在這種情況下,我是否必須鎖定線程安全性?我無法找到答案。我可以做一個測試,但想聽聽你的經驗。C socket API是線程安全的嗎?
EDIT:我知道通過套接字發送數據根本不是原子操作。當然,我們必須使用互斥體來保證線程安全。但是,我想知道系統API是否可以擁有自己的內部鎖。如果是這樣,我們可以省略把自己的鎖。
此問題也適用於fprintf
函數。我想知道這樣的系統API會擁有自己的鎖。根據我的經驗,從多個線程調用fprintf
並沒有殺死我的程序,儘管文件或stdout上有比賽(即不一致或不可預知的輸出,但程序沒有崩潰),這暗示fprintf
有一個鎖來保護它們的內部數據結構。
在我看來,多線程讀取和寫入同一個套接字是事實上的設計問題。 – theMayer 2018-02-12 20:10:33