2009-05-18 93 views
0

我維護着這裏的每一個操作以前開發商在插座上執行現有的系統,以讀取和寫入需要多個線程,以前的開發人員的控制下進行的IO操作和一個互斥體。是否需要相互排除C套接字IO操作?或者因爲套接字是全雙工的,使用互斥體是多餘的?只有一個線程互斥和C套接字

有一個在我心中毫無疑問,哪個線程將對象放入共享內存和護理的處理隊列,必須採取相互excluse它。

回答

1

套接字是不是線程安全的默認。所以,如果你有多個線程讀取和寫入他們,你將需要鎖定以某種方式(用互斥例如)訪問。

0

在TCP(AF_INET,SOCK_STREAM)的情況下,它是確定有一個讀線程(RECV)和不同步寫線程(發送)。

但是,從你的描述,目前尚不清楚什麼目的互斥在你的代碼使用 - 它看起來像「以前開發商」同步聯網,因爲插座不操作,但由於您的應用協議的要求。 許多應用程序進行通信時這樣說:

lock 
-> send request 
<- recv reply 
unlock 

lock 
-> send request 
<- recv reply 
unlock 

鎖定這裏需要(如果有多個線程參與)同步發送/ recv的對,否則你的應用程序協議可能會成爲無與倫比的請求和應答的一個爛攤子。