linux的线程库是Pthread,代码需要包含<pthread.h>头文件,编译里需要添加-pthread参数。
线程句柄
pthread_t
线程创建函数
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);第一个参数 线程句柄
第二个参数 线程属性
第三个参数 线程运行函数
第四个能数 传到线程里的参数
创建成功返回0,否则返回错误代码
等待线程运行结束函数
int pthread_join(thread_t tid, void **status);
代码目标
创建多个线程,给每个线程一个号码,然后线程将获取的号码打印出来。
#include<pthread.h> #include<stdio.h> #include<cstdlib> void *threadFuntion(void *arg){ int *threadNum=(int *)arg; printf("线程获取的号码:%d\n",*threadNum);//将号码输出 (*threadNum)++; } int main(){ int i,j; printf("演绎linux多线程.第一篇 \n"); printf("by 第XXX个小号 原文(http://blog.csdn.net/ccy0815ccy) \n"); const int N=10; pthread_t threadID[N];//线程ID int threadNum=0;//线程获取的号码 for(i=0;i<N;i++){ pthread_create(&threadID[i],NULL,threadFuntion,&threadNum);//将号码传给线程 } for(j=0;j<N;j++) pthread_join(threadID[j],NULL);//等待线程运行结束 printf("运行完成后threadNum的值:%d",threadNum); return 0; }
不同的线程获取的相同的号码。子线程是并行的,可能threadNum被同时输出,也就是对threadNum变量的同时访问,此时threadNum被称为临界资源,对临界资源进行操作的相关代码段称为临界区。这是线程中经典互斥问题。将在以后的文章中讨论
转载请标明出处,原文http://blog.csdn.net/ccy0815ccy