Добрый день. Есть два объекта А и B. Каждый работает в своем потоке. В определенный момент проверяю состояние объекта B, что там у него происходит.
if(B->getState() == Free){
}
объект B живет в своем потоке своей жизнью соответственно и изредка меняет переменную mState
QString B::getState(){
return mState;
}
Может ли так произойти что объект А обращаясь напрямую к данным объекта B нарушит что-либо, т.е. имеют ли поля объекта атомарную целостность? Нужно ли в момент обращения к данным объекта, работающего в другом потоке защищать их мьютексами, т.к. поток B сам может в любой момент поменять эти данные.
Тоже себя об этом спрашиваю. Ответ в том что в данный момент объекту А нужно прямо сейчас узнать состояние в B и от этого зависят действия A в текущем методе. Если я вас правильно понял, могу сделать emit который запросит у потока B состояние и вернет мне его через сигнал в какой-нибудь slot, что-то вроде
но если после того как я сделал в A запрос состояния B следующий строчкой идет уже анализ этого состояния, то я никак не могу разобраться что будет дальше.
B получит запрос, отправит сигнал и в объекте А изменится переменная bmState, после чего А продолжит работу
или
В получит запрос который встанет в очередь и после отработки текущего метода дойдет очередь до вызова слота объекта А::setState
//запрос состояния B
emit state();
//Анализ состояния B
if (getBState() == Free){
}