【发布时间】:2016-08-26 05:33:14
【问题描述】:
我有一个运行三个线程的应用程序。所有三个线程都在根据全局变量的状态进行一些操作。 2 个线程正在运行相同的代码,1 个线程正在运行另一段代码。
例如:
全局变量初始值为假
gGlobalVarLock = false;
thread 1:
while(true == gGlobalVarLock)
{
/*wait for flag to become false*/
}
/*after the flag becomes false*/
{
mutex.lock();
gGlobalVarLock = true;
/*run some code*/
gGlobalVarLock = false;
mutex.unlock();
}
thread 2 and 3,
while(true == gGlobalVarLock)
{
/*wait for flag to become false*/
}
/*after the flag becomes false*/
{
mutex.lock();
gGlobalVarLock = true;
/*run some other code*/
gGlobalVarLock = false;
mutex.unlock();
}
现在,由于 gGlobalVarLock 的 init false 值导致应用程序启动后,其中一个线程开始执行,并且应该锁定其他线程以使其无法执行。根据我的理解,上述实现以某种方式确保 gGlobalVarLock 被执行线程锁定,并且一旦任何特定线程的 mutex.lock() 下的代码正在执行,就没有其他线程可以访问它。看起来它也在锁下锁定全局变量。但我不知道怎么做。
我的代码似乎运行良好。但我有一个疑问。 Mutex 将锁定线程 2 和 3 的代码,因为这两个线程使用同一段代码执行。但是对于运行其他一些代码的线程 1,锁定是如何工作的?该线程中的 mutex.lock() 是否确保 gGlobalVarLock 在其 mutex.lock() 下执行代码时为其他线程锁定。该互斥锁是否确保 gGlobalVarLock 不会更改我正在运行其他代码的其他线程?我的理解是 mutex.lock() 锁定不同线程使用的通用代码。那么在不同线程运行不同代码的情况下,全局变量如何被锁定。
mutex.lock() 是否会在多线程环境中锁定全局变量?
【问题讨论】:
-
顺便说一句,你从来没有显示/告诉过
mutex的类型。 -
它在我的应用程序中具有这些线程的全局互斥锁
标签: c++ multithreading