J'ai utilisé boost::shared_mutex
comme objets de synchronisation dans le modèle Writer-Readers. Cependant, il est considérablement lent par rapport à aucun verrou utilisé (Dans mon test: sans aucun lecteur, écrire 500 000 valeurs, il faut 100 msec si aucun verrou utilisé et ~ 500 ms si boost::shared_mutex
utilisé). C'est pourquoi j'ai décidé de considérer quelque chose comme spinlock. Je voudrais faire un spinlock portable (Windows + Linux).Lecture-écriture portable spinlock
- Y a-t-il un wrapper de boost que je peux utiliser instantanément?
- This est un bon sujet qui montre comment implémenter spinlock sur Windows. Mais j'ai été incapable de trouver des équivalents d'API Win32 telles que
InterlockedCompareExchange
,YieldProcessor
,InterlockedDecrement
sous Linux.
Mise à jour 2016/03/08
J'ai trouvé un guide et implementation publié par facebook sur GitHub. Je n'ai pas encore essayé. J'ai mis à jour ici pour tous ceux qui auront la même question et pourraient vouloir se référer.
Si vous avez plus d'écrivains que de lecteurs, l'utilisation d'un mutex partagé est stupide. Ils sont pour les cas où vous voulez rendre les lecteurs rapides au détriment de rendre l'opération d'écriture relativement rare plus lente. Essayez d'utiliser des mutex ordinaires. –
@DavidSchwartz Je n'ai qu'un seul auteur et jusqu'à 16 lecteurs. –
Alors pourquoi vous souciez-vous de la façon dont il fonctionne sans lecteurs ?! –