Если вы хотите убедиться, что один поток имеет приоритет над другим, можно использовать QReadWriteLock
. Он адаптирован к типичному сценарию, в котором n потоков будут считывать значение в бесконечном цикле, и только один поток будет его обновлять. Я думаю, что это сценарий, который вы описали.
QReadWriteLock
предлагает два способа блокировки: lockForRead()
и lockForWrite()
. Потоки, зависящие от значения, будут использовать последнее, в то время как поток, обновляющий значение (обычно через графический интерфейс), будет использовать первое (lockForWrite()
) и будет иметь высший приоритет. Вам не нужно будет спать или уступать или что-то еще.
Пример кода
Допустим, у вас есть QReadWrite lock;
где-то.
Тема "Читатель"
forever {
lock.lockForRead();
if (condition) {
do_stuff();
}
lock.unlock();
}
Тема "Писатель"
// external input (eg. user) changes the thread
lock.lockForWrite(); // will block as soon as the reader lock ends
update_condition();
lock.unlock();