下面是我的代码,其中两个变量在回调时更新,每50ms调用一次。还有一个读取器线程每隔50ms唤醒一次并读取变量。并发读写
经过this后,我猜想会有一些情况,读取的线程会在收到回调时唤醒,因为我在读写时没有锁定相同的互斥量,在这种情况下,它会导致读取的内存不一致。
但是,当我运行它时,这种情况永远不会发生。是不是已经运行了足够长的时间,还是在我的理解中有错误?
recursive_mutex mutex1
recursive_mutex mutex2
var1, var2
//called every 50ms
onUpdateListener() {
lock(mutex1)
update var1
update var2
}
VarReaderThread::readVar() {
sleep(50)
while(true) {
{
lock(mutex2)
read var1
read var2
sleep(50)
}
}
}
你的互斥体的'范围'不清楚。 –
为什么要使用这些互斥锁?是否有其他代码访问变量?因为在这种情况下,它们完全没用。 –
您不应该同时书写和阅读,否则可能会遇到不一致的状态(竞争条件)。尽管可以同时执行读取和读取,但您不应该同时写入和写入。写作不混合。使用单独的锁进行读取和写入将无济于事。正如@HenkHolterman在那段代码中暗示那些互斥体什么都不做。 – Persixty