Mutex范围如何工作

时间:2011-05-15 17:17:44

标签: c mutex

互斥范围如何正常工作。

如果我想要3个互斥量用于不同的东西并将它们放置为

static pthread_mutex_t watchdogMutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t watchdogCond = PTHREAD_COND_INITIALIZER;
int waitingForGpsSetupThread = 1;

static pthread_mutex_t gpsRunningMutex = PTHREAD_MUTEX_INITIALIZER;
int gpsRunning = 0;

static pthread_mutex_t indoorNavigationRunningMutex = PTHREAD_MUTEX_INITIALIZER;
int indoorSystemRunning = 0;

变量是否在上面第一个互斥声明的范围内定义或者它是如何工作的?

2 个答案:

答案 0 :(得分:2)

这些只是C变量。您声明它们的顺序无关紧要。重要的是,如果你想同时保存互斥锁,你尝试获取/锁定互斥锁的顺序是什么(如“始终以相同顺序获取资源”的口头禅)。

编辑0:

看起来你可以使用一些介绍性的线程材料:

我还记得如何google ...:)

答案 1 :(得分:1)

如上所述,三个互斥锁都在同一范围内。没有标有“{...}”的块来表示其他情况。如果类型都是int,则情况也是如此。从这个角度来看,互斥体与任何其他类型都没有区别。

在使用时,你会做类似的事情:

pthread_mutex_lock(&watchdogMutex);

...operations protected by the watchdog mutex...

pthread_mutex_unlock(&watchdogMutex);

中间的位可以说是互斥锁被锁定的范围。在这些操作过程中使用return语句是一个非常糟糕的主意 - 除非互斥锁在返回之前也被解锁。

请参阅POSIX定义。