2013-06-01 32 views
0

我有一個c語言的服務器,它通過來自客戶端的選擇請求來接受。我創建了一些線程來服務於客戶請求的操作。直到這一點我沒事。但是現在我想擁有一個內部套接字,所以創建的線程將與主線程進行通信,通過它發送響應。任何想法如何解決這一切?內部插座和外部插座連同tcp

回答

1

這很容易。你想用這個是socketpair(2)。爲每個線程創建一個對,然後完成。

0

@Guillaume是對的。但爲什麼要經歷所有的複雜性。

我只會這樣做,如果你打算有一臺服務器,有時運行一個程序中的所有線程通過套接字進行通信,有時在具有通過常規套接字進行通信的「工作線程服務器」的不同計算機上運行。

除非您需要像這樣具有異國情調,否則您可以在線程之間使用共享內存塊進行通信(在適當的情況下使用互斥鎖進行保護)。例如。將任務對象從調度程序線程傳遞到工作線程。並且忘記了線程間通信的序列化和反序列化數據的複雜性。

+0

我知道一個共享內存將是一個更容易的想法,但不幸的是我想使它與這種「異國情調」的方式工作。所以我會盡力用Guillaume的方式找到方式。非常感謝btw。 – harry77

+0

這取決於。如果工作調度機制已經構建在套接字上,那麼使用套接字肯定更容易。如果您切換共享內存隊列,則必須在一次調用中輪詢套接字,並在另一次調用中輪詢套接字。您可以使用套接字(寫入一個字節)執行通知,但通過共享內存執行實際的通信。取決於交換多少東西,這可能是一個很好的折衷 – Guillaume