Si vous avez l'habitude d' pthreads(3)
:
-
boost::mutex
= pthread_mutex_*
-
boost::unique_lock
= pthread_rwlock_*
utilisés pour obtenir de l'écriture/verrous exclusifs (c - pthread_rwlock_wrlock
)
-
boost::shared_lock
= pthread_rwlock_*
utilisé pour obtenir de lecture/verrous partagés (c - pthread_rwlock_rdlock
)
Oui un boost::unique_lock
et boost::mutex
fonction de manière similaire, mais un boost::mutex
est généralement un poids plus léger mutex pour acquérir et de libération. Cela dit, shared_lock
avec la serrure déjà acquis est plus rapide (et permet de simultanéité), mais c'est relativement cher pour obtenir un unique_lock
.
Vous avez à regarder sous les couvertures pour voir les détails de mise en œuvre, mais c'est le sens de la destinée des différences.
Parlant de la performance: voici un modérément utile comparaison des latences:
http://www.eecs.berkeley.edu/%7Ercs/research/interactive_latency.html
Ce serait bien si j'/quelqu'un pourrait comparer le coût relatif des différents pthread_* primitives, mais le dernier que j'ai regardé, pthread_mutex_*
~25us, alors qu' pthread_rwlock_*
~20-100us selon si oui ou non le verrou en lecture avait déjà été acquis (~10us) ou non (~20us) ou de l'écrivain (~100us). Vous aurez pour indice de référence pour confirmer les chiffres et je suis sûr que c'est très spécifique au système d'exploitation.