gpt4 book ai didi

c - 我的线程不是并行的,它们是串行的。如何使它们平行?

转载 作者:太空狗 更新时间:2023-10-29 15:26:14 25 4
gpt4 key购买 nike

我正在练习多线程。

我创建了两个在屏幕上显示文本的 posix 线程(无限循环),但似乎只运行了第一个线程。我在没有循环的情况下修改程序,第一个线程打印,下面是第二个线程。看来我的线程不是并行的,第一个线程必须在第二个线程开始之前完成。我怎样才能使它们平行?

谢谢,

hdr.h

#ifndef HDR_HDR_H_
#define HDR_HDR_H_
#define HDR_HDR_H_
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#endif /* HDR_HDR_H_ */

多线程01.c

#include "../hdr/myfunc.h"
pthread_mutex_t lock;

int main(int argc, char **argv)
{
pthread_t tid01;
pthread_t tid02;
void * status01;
void * status02;

pthread_create(&tid01, NULL, PrintOut01(), NULL);
pthread_create(&tid02, NULL, PrintOut02(), NULL);

pthread_join(&tid01, &status01);
pthread_join(&tid02, &status02);

return 0;

myfunc.h

#ifndef HDR_MYFUNC_H_
#define HDR_MYFUNC_H_
#include "../hdr/hdr.h"
void * PrintOut01 (void);
void * PrintOut02 (void);
#endif /* HDR_MYFUNC_H_ */

myfunc.c

#include "../hdr/hdr.h"

extern pthread_mutex_t lock;

void * PrintOut01 ()
{
while (1)
{
pthread_mutex_lock(&lock);
printf ("This is thread 01\n");
pthread_mutex_unlock(&lock);
}
}

void * PrintOut02 ()
{
while (1)
{
pthread_mutex_lock(&lock);
printf ("This is thread 02\n");
pthread_mutex_unlock(&lock);
}
}

最佳答案

这是因为您在 pthread_create 调用中调用函数,您没有传递函数指针。

比较不正确

pthread_create(&tid01, NULL, PrintOut01(), NULL);

正确的

pthread_create(&tid01, NULL, PrintOut01, NULL);

如果您删除函数中的循环,并像您在问题代码中那样创建线程,那么 pthread_create 将使用您从函数返回的任何内容作为指向线程的指针函数,除非您返回指向函数的指针,否则您将有未定义的行为

关于c - 我的线程不是并行的,它们是串行的。如何使它们平行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102099/

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