线程无法以正确的顺序打印出来

时间:2016-09-30 19:44:17

标签: c pthreads

我对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

1 个答案:

答案 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)