gpt4 book ai didi

c - 线程未按正确顺序打印

转载 作者:行者123 更新时间:2023-12-04 12:09:21 26 4
gpt4 key购买 nike

我对 C 中的线程相当陌生。对于这个程序,我需要声明一个线程,我将其传递到一个 for 循环中,这意味着从线程中打印出 printfs。

我似乎无法让它以正确的顺序打印。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 16

void *thread(void *thread_id) {
int id = *((int *) thread_id);
printf("Hello from thread %d\n", id);
return NULL;
}

int main() {
pthread_t threads[NUM_THREADS];
for (int i = 0; i < NUM_THREADS; i++) {
int code = pthread_create(&threads[i], NULL, thread, &i);

if (code != 0) {
fprintf(stderr, "pthread_create failed!\n");
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}

//gcc -o main main.c -lpthread

最佳答案

那是理解多线程的经典例子。线程同时运行,由 OS 调度程序调度。当我们谈论并行运行时,没有所谓的“正确顺序”。

此外,还有诸如标准输出输出缓冲区刷新之类的事情。意思是,当您“打印”某些内容时,并没有 promise 它会立即发生,而是在达到某个缓冲区限制/超时后发生。

另外,如果你想以“正确的顺序”完成工作,意味着等到第一个线程完成它的工作,然后再开始下一个线程,考虑使用“join”: http://man7.org/linux/man-pages/man3/pthread_join.3.html

更新:在这种情况下,将指针传递给 thread_id 也是不正确的,因为线程可能会打印不属于他的 id(感谢 Kevin)

关于c - 线程未按正确顺序打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39799030/

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