【发布时间】:2012-04-27 00:47:55
【问题描述】:
我有一个大问题,我不明白为什么 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 解锁互斥锁。但是我收到了像
这样的干扰消息函数 功能 功能 另一个函数 另一个函数 另一个函数 功能 另一个函数
我不明白这东西是怎么工作的。请帮忙!
【问题讨论】:
标签: c multithreading mutex multitasking