У меня есть четыре потока, которые должны быть синхронизированы. Для этого я хочу передать каждому потоку один и тот же массив bool. Каждый поток изменит «соответствующее» значение на true, как только достигнет определенной точки в потоке, а затем постоянно проверяет, являются ли остальные значения истинными. Если это так, введите цикл ... Пример
//above thread init stuff
oLock->lockForWrite();
abSync[iThreadNum] = true; //iThreadNum = {0...3} depending on whats set
oLock->unlock();
bool bSynced = false;
while (!bSynced)
{
oLock->lockForRead();
if (abSync[0] && abSync[1] && abSync[2] && abSync[3])
bSynced = true;
oLock->unlock();
}
//below thread run and finish
Работает ли QReadWriteLock, как описано выше? Будет ли он фактически блокировать переменную для записи (по мере прохождения каждого потока), но не для чтения? быстрый просмотр документации показывает, что QReadWriteLock будет блокироваться только на lockForRead()
, если есть блокировка записи, но не блокировка чтения, как я и хотел выше.
Кроме того, я понимаю, что вышесказанное будет отсасывать циклы ЦП по мере прохождения цикла, и это требуемое поведение. Использование Sleep
недостаточно достаточно для наших нужд.