Question

Par exemple, les interfaces c ++ 0x

J'ai de la difficulté à déterminer quand utiliser laquelle de ces choses (cv, mutex et lock). Quelqu'un peut-il s'il vous plaît expliquer ou pointer du doigt une ressource?

Merci d'avance.

Était-ce utile?

La solution

Sur la page à laquelle vous vous référez, & "; mutex &"; est la primitive de synchronisation de bas niveau réelle. Vous pouvez prendre un mutex puis le relâcher, et un seul thread peut le prendre à la fois (c'est donc une primitive de synchronisation). Un mutex récursif en est un qui peut être pris plusieurs fois par le même thread. Il doit ensuite être libéré autant de fois par le même thread avant que d'autres ne puissent le prendre.

Un " verrouiller & "; Voici juste une classe wrapper C ++ qui prend un mutex dans son constructeur et le libère au destructeur. C'est utile pour établir la synchronisation pour les portées C ++.

Une variable de condition est une primitive de synchronisation plus avancée / de haut niveau qui combine un verrou avec une & "; signalisation &"; mécanisme. Il est utilisé lorsque les threads doivent attendre qu'une ressource soit disponible. Un fil peut & Quot; attendre & Quot; sur un CV, puis le producteur de ressources peut " signaler " la variable, auquel cas les threads qui attendent le CV sont informés et peuvent continuer à s'exécuter. Un mutex est combiné à CV pour éviter la situation de concurrence critique lorsqu'un thread commence à attendre sur un CV au même moment qu'un autre thread souhaite le signaler. il est alors impossible de contrôler si le signal est délivré ou s'il est perdu.

Autres conseils

Je ne connais pas très bien w / C ++ 0x, prenez donc cette réponse avec un grain de sel.

re: Mutex contre verrous: la documentation que vous avez publiée donne l’impression qu’un mutex est un objet représentant un mutex de système d’exploitation, alors qu'un lock est un objet contenant un mutex pour faciliter la modèle RAII .

Les variables de condition sont un mécanisme pratique pour associer un mécanisme de blocage / signalisation (signal + wait) à un mécanisme d'exclusion mutuelle, tout en les maintenant découplées dans le système d'exploitation afin que vous en tant que programmeur système puissiez choisir l'association entre condvar et mutex. (utile pour traiter avec plusieurs ensembles d’objets accédés simultanément) Rob Krten a quelques de bonnes explications sur les commandes dans l'un des chapitres en ligne de son livre sur QNX .

En ce qui concerne les références générales: Ce livre (pas encore sorti) semble intéressant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top