@pcunite отредактируйте свой вопрос с этой информацией
ел бы подтвердить, что мой подход чрезвычайнобыстрый и подходит для кроссплатформенной защиты общего ресурса для подхода с несколькими читателями и одним писателем с использованием C ++. Авторы предпочитают, чтобы при их входе все текущие потоки могли завершаться, но все новые потоки любого типа должны ждать. Обратное из этих двух функций должно быть очевидным.
Чтение, которое я сделал, предполагает, что повышениеshared_mutex и другие типы блокировок не очень хорошо реализованы и их следует избегать. На самом деле, shared_mutex не превратится вC ++ 0x Я беру это. Видетьэтот ответ Энтони Уильямс.
Кажется, что можно даже написать целое число и не нуждаться ни в каком блокировании, если оно выровнено правильно. Есть так много статей, есть хорошее чтение на эту тему, так что мне не нужно сортировать пшеницу из соломы?
void AquireReadLock(void)
{
mutex::enter();
if(READ_STATE == true)
{
iReaders++;
mutex::leave();
return;
}
else
{
mutex::leave();
sleep(1);
AquireReadLock();
return;
}
}
void AquireWriteLock(void)
{
mutex::enter();
READ_STATE = false;
if (iReaders != 0)
{
mutex::leave();
sleep(1);
AquireWriteLock();
return;
}
else
{
mutex::leave();
return;
}
}