2013-07-17 64 views
0

我有三臺機器A,B和C,它們都彼此連接。如果A和B嘗試同時向C發送數據,Can C可以使用兩個不同的線程接收相應的數據而不使用任何鎖定?這裏C通過不同的插座連接到A和B.提前致謝。當主機試圖從不同的套接字接收數據時,是否需要鎖定

+0

我會說你可以有2個線程。一個線程偵聽來自套接字1的數據,另一個線程偵聽來自套接字2的數據。但是,如果您需要鎖定,則應取決於您對數據所做的操作。你把它寫入緩衝區?由於線程共享數據,代碼和堆段,因此在寫入此收到的數據時必須小心,在這種情況下需要鎖定。這是我的基本理解。我會在這裏等待更多有見識的答案。 – rockstar

回答

1

嗯,是的 - 無論如何都沒有明確的鎖定。 IP堆棧將擁有自己的內部鎖,但我不認爲這就是你要求的。

您已經意識到多個進程可以與不同的服務器同時進行通信,並且多個進程意味着不同的線程。 IP堆棧因此是線程安全的。

鑑於通常對一個多線程進程內的任何共享數據的一般關心(如rockstar評論所述),這些線程與不同對等端/主機上的IP端點進行通信時沒有問題。這很常見,並且工作正常。

C上的兩個線程可以安全地用A和B

獨立溝通來吧 - 試試吧!

0

[張貼作爲回答我的意見,因爲它不是錯誤的,是有道理的:P。甚至引用]

我要說的是,你可以有2個線程。一個線程偵聽來自套接字1的數據,另一個線程偵聽來自套接字2的數據。

但是,如果你需要一個鎖或不應該取決於你對數據做什麼。你把它寫入緩衝區?由於線程共享Data,Code & Heap分段,因此在寫入此收到的數據時必須小心,在這種情況下需要鎖定。

這是我的基本理解。我會在這裏等待更多有見識的答案。

相關問題