我正在运行以下代码(底部的代码),以了解如何使用线程和互斥锁。从我认为互斥锁的工作方式来看,一旦有一个被pthread_mutex_lock
标记的锁定代码段,那么任何其他线程都无法前进,直到该线程被解锁。所以,如果是这种情况,我会得到这个输出:
TEST
0
TEST
1
TEST
2
TEST
3
TEST
4
但我得到这样的输出(每次运行不同):
TEST
0
TEST
1
TEST
2
TEST
TEST
3
4
所以我想知道我是否理解互斥锁是如何工作的,或者我是否错误地使用它们。无论哪种方式,我将如何获得我期望使用线程的输出?感谢您提前获得所有帮助。
int counter;
pthread_mutex_t lock;
void * threadAction(void * unused);
int main()
{
pthread_t tid[5];
int i = 0;
counter = -1;
for(i = 0; i < 5; i++
{
pthread_create(&tid[i], NULL, threadAction, NULL);
}
for(i = 0; i < 5; i++
{
pthread_join(tid[i], NULL);
}
}
void * threadAction(void * unused)
{
pthread_mutex_lock(&lock);
printf("TEST\n");
counter++;
printf("%d\n", counter);
pthread_mutex_unlock(&lock);
return NULL;
}