2010-11-08 60 views
1

我有兩個線程,每個線程都有一些帶有數據的緩衝區。我有一個寫入TCP套接字的函數。 (我使用ffmpeg。)數據包如何到達服務器 - 以某種瘋狂的混合方式或以某種其他順序,或者操作系統(Windows,在我的情況下)讓一個線程等待,直到另一個線程完了嗎?從不同線程同時寫入套接字時會發生什麼?

+1

什麼是您的套接字實現,以及您使用哪些API來執行寫操作? – 2010-11-08 17:39:17

+0

撒旦本人將從最近的空網絡門戶出來。 – 2010-11-08 17:56:54

+0

@Noah:當兩個不同的線程讓撒旦自己從最近的空網絡門戶同時出現時會發生什麼?如果線程運行在兩個網絡門戶之間*完全等距的CPU的不同核心上,那麼這兩個網絡中的一個更接近一個核心,另一個更靠近另一個核心?詢問頭腦想知道。 – 2010-11-08 18:28:59

回答

5

這完全取決於您使用的「套接字」的實現。如果你的實現是同步的,你會得到第一個線程的數據,然後是第二個線程的數據(第二個線程會在第一個線程發送時阻塞)。如果你的實現不同步,你會得到胡言亂語。

+0

我有簡單的TcpListener的C#服務器... – Rella 2010-11-08 17:44:41

+0

@Kabumbus - 那麼爲什麼是q標籤的C++?你最近怎麼寫? – 2010-11-08 17:45:58

+0

我從C++流入它 – Rella 2010-11-08 17:52:29

0

mmm,那麼,你必須同步它們,以避免意外的結果。

+0

這是完整的猜測,沒有關於代碼 – 2010-11-08 17:43:54

+0

nope的更多信息,我說,因爲Kabumbus沒有顯示任何代碼,我們不知道他使用的是什麼類型的實現。所以,對我而言,沒有足夠的信息去做一些代碼。 – crsuarezf 2010-11-08 17:46:22

+0

好吧,這有點不公平 - 這當然是相當典型的行爲。 – 2010-11-08 17:46:45

相關問題