访问共享内存以进行读取时锁定

如果我访问共享内存只读,要检查if()块的条件,我还应该锁定互斥锁吗? 例如

 mutex_lock(); if (var /* shared memory */) { } mutex_unlock(); 

锁定在这里需要和良好的做法?

如果您正在读取的变量可以同时写入,那么是的,您应该获取对互斥锁的锁定。

如果你的编译器为你提供了必要的原语,那么你只能primefaces地读它。 这可能是C11和C ++ 11附带的primefacesfunction,也可能是编译器提供的其他语言扩展。 然后你可以将互斥量获取移动到条件中,但是如果你等到测试后获得互斥锁,那么其他人可能会在你测试它和你获得互斥锁的时间之间改变它:

 if (example) { // "example" variable could be changed here by another thread. mutex_lock(); // Now the condition might be false! mutex_unlock(); } 

因此,我建议在条件之前获取互斥锁,除非分析已经将互斥量获取确定为瓶颈。 (并且在测试变量大于CPU寄存器的情况下 – 例如32位CPU上的64位数字 – 那么你甚至没有选择在没有其他类型的情况下延迟互斥量获取primefaces获取或比较原语。)