我有一个大问题,我无法弄清楚为什么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编码。

10-06 10:23