我有一个大问题,我不明白为什么 C 中的互斥锁不能按我的预期工作。这是我的代码:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
pthread_t mythread;
pthread_mutex_t mymutex;
void *anotherFunc(void*)
{
pthread_mutex_lock(&mymutex);
for(int i = 0; i < 100; i++)
printf("anotherFunc\n");
pthread_mutex_unlock(&mymutex);
pthread_exit(NULL);
}
void *func(void*)
{
pthread_mutex_lock(&mymutex);
for(int i = 0; i < 100; i++)
printf("func\n");
pthread_mutex_unlock(&mymutex);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_mutex_init(&mymutex, NULL);
pthread_create(&mythread, NULL, func, NULL);
pthread_create(&mythread, NULL, anotherFunc, NULL);
pthread_mutex_destroy(&mymutex);
pthread_exit(NULL);
return EXIT_SUCCESS;
}
我期望发生的是程序先打印 100 条“func”消息,然后再打印 100 条“anotherFunc”消息。我期望的是执行到达 func 并锁定互斥锁。当执行到达 anotherFunc 时,我希望等到 func 解锁互斥锁。但我收到干扰消息,例如
func func func anotherFunc anotherFunc anotherFunc func anotherFunc
我不明白这东西是如何工作的。请帮忙!