2015-06-16 112 views
3

我有一個線程在循環中調用recvfrom,超時時間爲100毫秒。 另一個線程定期調用sendtoC函數recvfrom和sendto是否互斥?

sendto函數是否等待,直到recvfrom由超時釋放(或成功讀取)或在該時間段內發送數據。

+0

您的測試顯示了什麼? –

+0

那麼,我的程序按預期工作,但我試圖確定隨着競態條件的收緊,錯誤是否會蔓延。 – Pepedou

回答

3

C函數recvfrom和sendto是否互斥?

不可以。它們都可以同時由不同的線程執行。

sendto()不等待recvfrom()讀取數據。它會將數據放入套接字的緩衝區並返回。多個sendto()可能會阻止先前的sendto()完成。如果在發送過程中發生任何錯誤(緩衝區已滿,消息太大等),則可以檢查檢查errno以檢查失敗的原因。基本上,您不需要在兩個線程的調用sendto()recvfrom()之間進行任何同步;他們是原子操作。

1

不,它不會等待,(至少,它不會等到獲得線程安全訪問通信棧所需的時間)。