我有一个大问题,我无法弄清楚为什么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解锁互斥量。但是我收到类似的消息
功能
功能
功能
anotherFunc
anotherFunc
anotherFunc
功能
anotherFunc
我不明白这东西是怎么工作的。请帮忙!
最佳答案
您要在线程完成互斥之前销毁互斥体,因此所有赌注都关闭了。您可能需要在销毁这两个线程之前对它们进行pthread_join
编码。