gpt4 book ai didi

c - 我想得到 4 个单独的打印 : "This is a thread 1", "This is a thread 2"等等

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:52 25 4
gpt4 key购买 nike

在 for 循环中创建 pthread_create,这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>


pthread_mutex_t mutex;

void* helloWorld(void *i) {
pthread_mutex_lock(&mutex);
printf("This is a thread %d\n", *((int*) i));
pthread_mutex_unlock(&mutex);
return 0;
}


int main() {
pthread_mutex_init(&mutex, NULL);
pthread_t threads[4];
int i;
printf("Main Message\n");

for (i = 0; i < 4; i++) {
pthread_create(&threads[i], NULL, helloWorld, &i);
}

for (i = 0; i < 4; i++) {
pthread_join(threads[i], NULL);\
}

pthread_mutex_destroy(&mutex);

return 0;
}

只要所有 4 个线程都在工作,顺序并不重要。

我试过使用互斥锁,但没有解决问题。

我当前的输出非常随机,可以是 0000 或 0112 或其他任何值。

最佳答案

问题有两个:

  1. 首先,您无法控制线程何时运行或以何种顺序运行。

  2. 您将相同 指针传递给所有线程。

您可以通过将 if i 传递给线程来解决第二个问题。这是可以传递值而不是指针的少数情况之一:

pthread_create(&threads[i], NULL, helloWorld, (void*)(uintptr_t) i);

然后在线程中

printf("This is a thread %d\n", (int)(uintptr_t) i);

第一个问题,关于顺序,你必须想出一些其他的方法来同步线程以及它们如何相互通知。例如,通过使用四个条件信号,每个线程一个,您可以按照希望线程执行的顺序发出信号。

关于c - 我想得到 4 个单独的打印 : "This is a thread 1", "This is a thread 2"等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57942309/

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