Rozważmy następującej sytuacji:Odczekaj wielu wątków (POSIX C++)
mam foo obiektów, który jest wykorzystywany przez wiele nitek, które mogą lub nie mogą ponownie przywołać bar metody() na foo.
Jest idealnie (i pożądane), że bar() jest wykonywany wiele razy równolegle, ponieważ nigdy nie zmienia stanu foo.
Problem powstaje, gdy muszę zmienić stan foo z zewnątrz (z innego wątku, a nie z jednego z wątków "worker") - jak mogę zablokować foo w taki sposób, aby wywołujący wątek blokował do ostatni wątek roboczy jest wykonywany za pomocą paska(), a wszystkie wątki robocze będą blokowane przy pasku() aż do zwolnienia foo ponownie?
Oczywiście nie mogę po prostu użyć muteksu, który pozostaje zablokowany podczas wykonywania bar(), ponieważ wtedy nie będę miał tam współbieżności.
Wszelkie pomysły? Czy istnieje lepszy projekt dla tego typu problemów?
Zobacz [Blokada czytnika-pisarza] (http://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock) – hmjd
dlaczego nie wprowadzić muteksa w wątkach roboczych wokół wywołania funkcji paska i także na wątku wywołującym, który chce zmienić stan foos. wątek wywołujący blokuje muteks i może bezpiecznie zmienić stan foo. – mgr
'pthread_rwlock_t' może Cię zainteresować. – WhozCraig