我和同事一起编写运行在x86,x64,Itanium,PowerPC和其他10年历史的服务器CPU上的各种平台的软件。 我们只讨论了pthread_mutex_lock(),pthread_mutex_unlock()等互斥函数是否足够,或者被保护的variables是否需要变化。 int foo::bar() { //… //code which may or may not access _protected. pthread_mutex_lock(m); int ret = _protected; pthread_mutex_unlock(m); return ret; } 我关心的是caching。 编译器是否可以在堆栈或寄存器中放置_protected的副本,并在赋值中使用陈旧的值? 如果不是,什么阻止了这种情况发生? 这种模式的变化是脆弱的吗? 我认为编译器实际上并不知道pthread_mutex_lock()是一个特殊的函数,所以我们只是通过序列点保护? 非常感谢。 更新:好的,我可以看到一个趋势与解释为什么波动是不好的。 我尊重这些答案,但关于这个问题的文章很容易在网上find。 我在网上找不到的东西,也是我问这个问题的原因,就是我没有变化的保护。 如果上面的代码是正确的, 那么对于caching问题怎么办?