我对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
答案 0 :(得分:3)
这是理解多线程的经典例子。 线程同时运行,由OS调度程序调度。 没有&#34;正确的顺序&#34;当我们谈论并行运行时。
此外,还有缓冲区刷新stdout输出。意思是,当你&#34; printf&#34;事情,它不承诺它会立即发生,但达到一些缓冲限制/超时后。
另外,如果你想在&#34;正确的顺序&#34;中进行工作,意味着等到第一个线程完成它的工作后再开始下一个,考虑使用&#34; join&# 34 ;: http://man7.org/linux/man-pages/man3/pthread_join.3.html
UPD: 在这种情况下,将指针传递给thread_id也是不正确的,因为线程可能会打印不属于他的id(感谢Kevin)