演绎linux多线程.第一篇

简介

       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);

创建成功返回0,否则返回错误代码

代码目标

创建多个线程,给每个线程一个号码,然后线程将获取的号码打印出来。

代码

#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;
}


 
 


运行结果

演绎linux多线程.第一篇_第1张图片

分析

不同的线程获取的相同的号码。子线程是并行的,可能threadNum被同时输出,也就是对threadNum变量的同时访问,此时threadNum被称为临界资源,对临界资源进行操作的相关代码段称为临界区。这是线程中经典互斥问题。将在以后的文章中讨论


转载请标明出处,原文http://blog.csdn.net/ccy0815ccy

你可能感兴趣的:(thread,线程,linux,ubuntu)