我有一個線程在循環中調用recvfrom
,超時時間爲100毫秒。 另一個線程定期調用sendto
。C函數recvfrom和sendto是否互斥?
sendto
函數是否等待,直到recvfrom
由超時釋放(或成功讀取)或在該時間段內發送數據。
我有一個線程在循環中調用recvfrom
,超時時間爲100毫秒。 另一個線程定期調用sendto
。C函數recvfrom和sendto是否互斥?
sendto
函數是否等待,直到recvfrom
由超時釋放(或成功讀取)或在該時間段內發送數據。
C函數recvfrom和sendto是否互斥?
不可以。它們都可以同時由不同的線程執行。
sendto()
不等待recvfrom()
讀取數據。它會將數據放入套接字的緩衝區並返回。多個sendto()
可能會阻止先前的sendto()
完成。如果在發送過程中發生任何錯誤(緩衝區已滿,消息太大等),則可以檢查檢查errno
以檢查失敗的原因。基本上,您不需要在兩個線程的調用sendto()
和recvfrom()
之間進行任何同步;他們是原子操作。
不,它不會等待,(至少,它不會等到獲得線程安全訪問通信棧所需的時間)。
您的測試顯示了什麼? –
那麼,我的程序按預期工作,但我試圖確定隨着競態條件的收緊,錯誤是否會蔓延。 – Pepedou