互斥范围如何正常工作。
如果我想要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;
变量是否在上面第一个互斥声明的范围内定义或者它是如何工作的?
答案 0 :(得分:2)
这些只是C变量。您声明它们的顺序无关紧要。重要的是,如果你想同时保存互斥锁,你尝试获取/锁定互斥锁的顺序是什么(如“始终以相同顺序获取资源”的口头禅)。
看起来你可以使用一些介绍性的线程材料:
我还记得如何google ...:)
答案 1 :(得分:1)
如上所述,三个互斥锁都在同一范围内。没有标有“{...}”的块来表示其他情况。如果类型都是int
,则情况也是如此。从这个角度来看,互斥体与任何其他类型都没有区别。
在使用时,你会做类似的事情:
pthread_mutex_lock(&watchdogMutex);
...operations protected by the watchdog mutex...
pthread_mutex_unlock(&watchdogMutex);
中间的位可以说是互斥锁被锁定的范围。在这些操作过程中使用return
语句是一个非常糟糕的主意 - 除非互斥锁在返回之前也被解锁。
请参阅POSIX定义。