2012-03-19 84 views
-1

我想在C中的套接字上執行多線程以便在兩個不同的軟件應用程序之間開發連接器。我希望它以下面的方式工作。一個軟件將作爲服務器開始運行,它將執行各種功能,包括監聽指定端口上的套接字連接。該軟件將自行運行,並僅在建立連接的網絡套接字時使用數據並接收可靠的數據。因此,對於這部分,我希望能夠監聽連接,並且當其中一個分叉進程並且從此套接字接收到數據時,會設置一些將由其他更新線程使用的變量來通知它具有該變量可以考慮這些額外的精確信息。在這個等式的另一方面,我想創建一個程序,當它啓動時將嘗試連接到另一個應用程序的端口,一旦連接它,它將簡單地調用一個函數,以非阻塞方式發送信息。我的整個目標是創建一個連接器,使其他兩段代碼的程序員能夠感受到他們沒有處理套接字。 我已經能夠獲得多線程套接字通信,但我現在試圖修改這個,所以它將可用,因爲我已經描述過,我很困惑如何避免多次訪問該變量,將通知系統上的服務器端數據已經到達,並在客戶端創建非阻塞交互。任何幫助不理解。 -TJC多線程死鎖的線程事件

+2

你需要改善這個問題,顯示一些代碼和你關心的是什麼。此外,有很多代碼示例只是爲了做這種事情 – 2012-03-19 23:26:56

+0

猜測我只是想找一個很好的例子來說明如何避免c中線程之間的死鎖或通知..我在google上找到的所有東西都將我鏈接到C++或更新。 – 2012-03-19 23:30:39

+0

什麼樣的線程? – 2012-03-19 23:31:23

回答

0

的問題不是那麼清楚,我,但如果你需要不同的軟件很容易說話,你可以考慮使用一個框架,消息庫像ZeroMQ www.zeromq.org

+0

好的解決方案,但有點矯枉過正我的處境...只是想寫一個簡單的套接字連接器,所以我們可以發送超過6-8的數據感興趣的圖像。 – 2012-03-19 23:45:07

0

好像你有雙重生產者 - 消費者問題就在這裏:

Client side     Server 
producer -> sender thread -> receiver thread -> consumer thread 

在這種情況下,使用最有用的數據結構是兩側阻塞隊列,像英特爾TBB的concurrent_bounded_queue

這允許您從一個線程發佈任務,並讓其他線程以線程安全的方式提取數據。