Linux程序多线程入门

来源:互联网 发布:centos tmp 自动删除 编辑:程序博客网 时间:2024/06/06 10:02

实例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);}


0 0