实例1:进程和线程并行输出
/************************************************************************* > File Name: threadbase.c > Author: > Mail: > Created Time: 2015年12月04日 星期五 17时44分38秒 ************************************************************************/ #include<stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <pthread.h> /*要执行的线程函数*/ void *thread_routine(void *arg) { printf("i am a thread, my thread id is : %ld\n", pthread_self()); int i = 0; for (i = 1; i < 11; ++i){ printf("thread i = %d\n", i); fflush(stdout); sleep(1); } printf("thread exit\n"); } int main() { pthread_t tid; int ret = 0; ret = pthread_create(&tid, NULL, thread_routine, NULL);//创建一个线程 if(ret != 0){ printf("pthread_create error\n"); exit(0); } int i = 0; for (i = 1; i < 11; ++i){ printf("main i = %d\n", i); fflush(stdout); sleep(1); } sleep(2);//等待线程退出,如果线程还在执行,但是进程退出,那么线程也会退出 printf("parent exit\n"); exit(0); }
实例2:在进程中使用等待线程的函数和线程退出函数
/************************************************************************* > File Name: threadbase.c > Author: > Mail: > Created Time: 2015年12月04日 星期五 17时44分38秒 ************************************************************************/ #include<stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <pthread.h> void *thread_routine(void *arg) { printf("i am a thread, my thread id is : %ld\n", pthread_self()); int i = 0; for (i = 1; i < 11; ++i){ printf("thread i = %d\n", i); fflush(stdout); sleep(1); } sleep(3); printf("child exit\n"); pthread_exit(NULL);//线程结束函数 } int main() { pthread_t tid; int ret = 0; ret = pthread_create(&tid, NULL, thread_routine, NULL); if(ret != 0){ printf("pthread_create error\n"); exit(0); } int i = 0; for (i = 1; i < 11; ++i){ printf("main i = %d\n", i); fflush(stdout); sleep(1); } pthread_join(tid, NULL);//等待线程退出 printf("parent exit\n"); exit(0); }
实例3:创建多个线程,并向线程传递数据
/************************************************************************* > File Name: threadbase.c > Author: > Mail: > Created Time: 2015年12月04日 星期五 17时44分38秒 ************************************************************************/ #include<stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <pthread.h> typedef struct Threadinfo{ char name[64]; int age; int numId; }ThreadInfo; int nNum, nLoop; void *thread_routine(void *arg) { int i = 0; // pthread_detach(pthread_self()); ThreadInfo * p = (ThreadInfo *)arg; for (i = 0; i < nLoop; ++i){ printf("thread id is :%ld, i = %d, numid is %d\n", pthread_self(), i, p->numId); } printf("child exit: %ld\n", pthread_self()); pthread_exit(arg); } int main() { int i = 0; pthread_t tidArray[200]; ThreadInfo tmp[200]; printf("input the number of thread:"); scanf("%d", &nNum); printf("input the number of nLoop:"); scanf("%d", &nLoop); int ret = 0; for (i = 0; i < nNum; ++i){ memset(&tmp[i], 0, sizeof(ThreadInfo)); tmp[i].numId= i; pthread_create(&tidArray[i], NULL, thread_routine, &tmp[i]); } for (i = 0; i < nNum; ++i){ pthread_join(tidArray[i], NULL); } printf("parent exit\n"); exit(0); }