2009-05-18 7 views
0

Je maintiens un système existant où les développeurs précédents sur chaque opération sont exécutés sur la socket, à laquelle plusieurs threads doivent lire et écrire, les développeurs précédents ont effectué les opérations io sous le contrôle et un mutex. Existe-t-il une exigence pour exclure mutuellement les opérations d'E/S socket? Ou puisque les sockets sont en duplex intégral, l'utilisation d'un mutex est-elle redondante? Un seul threadExclusion mutuelle et Sockets C

Il ne fait aucun doute dans mon esprit que la file d'attente de traitement vers laquelle le thread place un objet est de la mémoire partagée et qu'il faut prendre soin de l'exclure mutuellement.

Répondre

1

Les connecteurs ne sont pas thread-safe par défaut. Donc, si vous avez plusieurs threads qui les lisent et les écrivent, vous devrez verrouiller l'accès d'une manière ou d'une autre (par exemple avec un mutex).

0

Dans le cas de TCP (AF_INET, SOCK_STREAM), il est possible d'avoir un thread de lecture (recv) et un thread d'écriture (send) qui ne sont pas synchronisés. Mais à partir de votre description, il n'est pas clair dans quel but mutex est utilisé dans votre code - il ressemble à des "développeurs précédents" des opérations réseau synchronisées non pas à cause des sockets, mais en raison des exigences de votre protocole d'application. De nombreuses applications effectuer des communications de cette façon:

lock 
-> send request 
<- recv reply 
unlock 

lock 
-> send request 
<- recv reply 
unlock 

verrouillage est nécessaire ici (si plusieurs threads sont impliqués) pour synchroniser envoyer/paires recv, sinon votre protocole d'application peut devenir un gâchis des demandes et des réponses inégalées.