есть такая ситуация: 1 поток добавляет что то в вектор(редактирует по сути) n потоков все время читают что то из этого вектора ну и само собой когда происходит попытка чтения элемента, когда он не до конца запушбэкался, программа падает нужно синхронизировать доступ к глобальному вектору, но юзать крит секции(в моем случае мутексы, под Linux), не хочется так как чтение происходит гораздо чаще чем запись, и поэтому потоки которые читают тоже выстраиваются в очередь, что влияет на производительность, хочется сделать так что бы потоки чтения блокировались только на тот момент когда происходит редактирование вектора подскажите как быть З.Ы думал сделать через sem_post/sem_wait но не придумал как именно :/
А можно же как-то блокировать тот же мьютекс по критерию PHP: if(Если идет запись) блок мьютекса; else Мьютекс не блокируется;
http://en.wikipedia.org/wiki/Readers–writer_lock Погуглил бы хоть, даже в boost есть имплементация, все ссылки есть на странице в Wiki.
еще в NTDLL.DLL есть этот механизм Code: RtlAcquireResourceExclusive RtlAcquireResourceShared RtlConvertExclusiveToShared RtlConvertSharedToExclusive RtlDeleteResource RtlDumpResource RtlInitializeResource RtlReleaseResource