【发布时间】:2011-06-06 15:27:28
【问题描述】:
如果我在函数的两个不同位置锁定同一个互斥锁,当一个线程在其中一个线程中发生上下文切换,而第二个线程到达另一个线程时,它会被阻塞吗?
我会试着举一个简单的例子来说明我的意思,也许它会更清楚。 假设我在文件 test.c 中有以下代码
int globalVar = 0;
void testMutex(pthread_mutex_t myMutex) {
pthread_mutex_lock(&myMutex);
globalVar++;
pthread_mutex_unlock(&myMutex);
printf("%s \n", "Doing some other stuff here");
pthread_mutex_lock(&myMutex);
globalVar--;
pthread_mutex_unlock(&myMutex);
}
在另一个文件 main.c 中,我有一个 main 函数,它创建两个线程,thread1 和 thread2,都运行 testMutex 函数。
thread1首先执行,而在函数的第二部分(--部分,在printf之后),在互斥锁解锁之前,thread2开始运行,从函数开始。
thread2 是否能够执行 globalVar++,还是会一直处于阻塞状态,等待互斥锁被解锁?
提前致谢!
【问题讨论】: