gpt4 book ai didi

c - POSIX C 线程。互斥量示例。没有按预期工作

转载 作者:太空狗 更新时间:2023-10-29 16:59:27 27 4
gpt4 key购买 nike

我有一个大问题,我想不通为什么 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 解锁互斥体。但是我收到像

这样的干扰消息

函数功能功能另一个函数另一个函数另一个函数功能另一个函数

我不明白这东西是怎么工作的。请帮忙!

最佳答案

pthread_create(&mythread, NULL, func, NULL);
pthread_create(&mythread, NULL, anotherFunc, NULL);

pthread_mutex_destroy(&mymutex);

您在线程完成使用它之前销毁了互斥锁,所以所有的赌注都没有了。您可能希望在销毁这 2 个线程之前pthread_join

关于c - POSIX C 线程。互斥量示例。没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com