Pthread_t没有开始

时间:2016-05-11 16:46:46

标签: c multithreading pthreads

我写这个简短的例子是为了理解C.中的线程编程。它应该写"线程0"。但是没有输出。 这是代码。

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

int i=0;
pthread_mutex_t mutex;

void * fonction(){
    pthread_mutex_lock(&mutex);
    printf("thread %d \n",i++);
    pthread_mutex_unlock(&mutex);
    pthread_exit(NULL);
}

int main(){
    pthread_t a;
    pthread_mutex_init(&mutex,NULL);
    pthread_create(&a,NULL,fonction,NULL);
    return EXIT_SUCCESS;
}

有人能帮助我吗? Ps:我用这个来编译它

gcc -pthread test.c -o test

2 个答案:

答案 0 :(得分:4)

pthread_join(a, NULL)之后和pthread_create()之前插入return EXIT_SUCCESS;,以确保在main()返回之前完成子线程。

答案 1 :(得分:3)

pthread_join()是一种方式,但它不是唯一的解决方案。

如果你的主线程不需要(需要)活着更长时间(比它创建的线程),它可以简单地退出pthread_exit(0)

当主线程使用pthread_exit()退出时,进程将保持活动状态,直到进程中的 last 线程退出。

当主线程执行初始化/设置并启动多个线程然后不再需要它时,这很有用。 否则,它必须等待所有线程完成(请记住,当main()退出时,整个进程退出 - 调用pthread_exit()将仅退出主线程< / em>,而不是整个过程。