je craignais qu'il pourrait y avoir une condition où un mutex en mémoire partagée pourrait ne pas se comporter correctement, donc je fait quelques recherches et est venu avec quelques documents qui traitent la question comme une évidence:
https://computing.llnl.gov/tutorials/pthreads/
en outre creuser, cependant, a montré que les anciennes versions de glibc ont souffert des problèmes dans les mutex de mémoire partagée: (Ce changement est ancienne, mais elle illustre le point.)
in linuxthreads/mutex.c
int __pthread_mutexattr_setpshared(...) {
/* For now it is not possible to shared a conditional variable. */
if (pshared != PTHREAD_PROCESS_PRIVATE)
return ENOSYS;
}
Sans plus de détails sur Quelle implémentation de pthread vous utilisez, il est difficile de dire si vous êtes en sécurité ou non. Ce qui m'inquiète, c'est que de nombreuses implémentations (et certains langages entiers, comme perl, python et ruby) ont un objet verrou global qui gère l'accès aux objets partagés. Cet objet ne serait pas partagé entre les processus et, par conséquent, alors que vos mutex fonctionneraient probablement la plupart du temps, vous pourriez vous retrouver avec deux processus manipulant simultanément le mutex en même temps.
Je sais que cela va à l'encontre de la définition d'un mutex, mais il est possible:
Si deux threads fonctionnent en même temps dans des processus différents, il implique qu'ils sont sur différents noyaux. Les deux acquièrent leur objet de verrou global et vont manipuler le mutex dans la mémoire partagée. Si l'implémentation de pthread force la mise à jour du mutex à travers les caches, les deux threads pourraient finir par se mettre à jour en même temps, les deux pensant qu'ils contiennent le mutex. C'est juste un vecteur d'échec possible qui me vient à l'esprit. Il pourrait y avoir un certain nombre d'autres. Quelles sont les spécificités de votre situation - OS, version pthreads, etc.?
OP question connexe: http://stackoverflow.com/questions/2389307/on-macosx-in-c-how-to-do-interprocess-communication-over-shared-memory-withou – Void