【发布时间】:2022-01-06 22:02:00
【问题描述】:
假设我们有一个全局变量和一个全局非成员函数。
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 阻止?
我的猜测是前者,但我需要听取经验丰富的程序员的意见;感谢您花时间阅读我的问题。
【问题讨论】:
-
lock只不过是一把锁,它不知道自己锁的是什么。它只执行两个操作:lock和unlock。就是这样。
标签: c++ multithreading mutex shared-resource