假设我们有一个全局变量和一个全局非成员函数。
int GlobalVariable = 0;
void GlobalFunction();
我们有
std::mutex MutexObject;
然后在其中一个线程中,我们有这段代码:
{
std::lock_guard<std::mutex> lock(MutexObject);
GlobalVairable++;
GlobalFunction()
}
现在,在另一个并行运行的线程中,如果我们这样做会发生什么:
{
//std::lock_guard<std::mutex> lock(MutexObject);
GlobalVairable++;
GlobalFunction()
}
所以问题是,互斥锁是否仅在被另一个线程拥有时锁定自己,而不关心在关键代码中试图访问的内容?还是编译器或在运行时,操作系统实际上将关键代码中正在访问的内存位置指定为现在被 MutexObject 阻止?
我的猜测是前者,但我需要听取经验丰富的程序员的意见;感谢您花时间阅读我的问题。