我写这个简短的例子是为了理解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
答案 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>,而不是整个过程。