LINUX多线程编程

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

#define THEARD_NUMBER 3
#define REPEAT_NUMBER 5
#define DELAY_TIME_LEVELS 10.0
void *thrd_func(void *arg){
	int thrd_num=(int)arg;
	int delay_time=0;
	int count=0;
	printf("Theard %d is starting\n",thrd_num );
	for(count=0;count<REPEAT_NUMBER;count++){
		delay_time=(int)(rand()*DELAY_TIME_LEVELS/(RAND_MAX))+1;
		sleep(delay_time);
		printf("\tThreard %d : job %d delay = %d\n",thrd_num,count,delay_time );
	}
	printf("Theard %d finished\n",thrd_num );
}
int main(void){
	pthread_t thread[THEARD_NUMBER];
	int no=0,res;
	void *thrd_ret;
	srand(time(NULL));
	for (no = 0; no < THEARD_NUMBER; no++){
		res=pthread_create(&thread[no],NULL,thrd_func,&no);
		if(res!=0){
			printf("Create thread %d failed\n",no );
			exit(res);
		}
	}
	printf("Create threads success \n Waiting for threads to finish......\n");
	for(no=0;no<THEARD_NUMBER;no++){
		res=pthread_join(thread[no],&thrd_ret);
		if(!res){
			printf("Theard %d joined\n",no );
		}else{
			printf("Theard %d  join failed\n",no );
		}
	}
	return 0;
}

这里主函数第一个for循环pthread()的最后一个参数可能不同版本的linux写法上会有所不同,我的是ubuntu14.04,要写成&no,red Hat下可以写为(void*)

代码编写没有问题,但是在gcc 编译的时候会报错

# gcc thread.c
thread.c: In function ‘thrd_func’:
thread.c:9:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  int thrd_num=(int)arg;
               ^
/tmp/cc3Y8DeX.o:在函数‘main’中:
thread.c:(.text+0xff):对‘pthread_create’未定义的引用
thread.c:(.text+0x163):对‘pthread_join’未定义的引用
collect2: error: ld returned 1 exit status

网上找到了原因,原来pthread不是linux的默认库中的文件,所以无法直接使用,需要在后面加上-lpthread

# gcc thread.c -o test -lpthread
thread.c: In function ‘thrd_func’:
thread.c:9:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  int thrd_num=(int)arg;
               ^

这里出现一个警告也没关系,编译能够通过就行,具体什么原因我也不知道。

运行test文件即可得到结果

./test
Create threads success 
 Waiting for threads to finish......
Theard 878785664 is starting
Theard 878785664 is starting
Theard 878785664 is starting
	Threard 878785664 : job 0 delay = 5
	Threard 878785664 : job 0 delay = 10
	Threard 878785664 : job 0 delay = 10
	Threard 878785664 : job 1 delay = 4
	Threard 878785664 : job 1 delay = 10
	Threard 878785664 : job 1 delay = 6
	Threard 878785664 : job 2 delay = 2
	Threard 878785664 : job 2 delay = 5
	Threard 878785664 : job 3 delay = 4
	Threard 878785664 : job 2 delay = 6
	Threard 878785664 : job 3 delay = 4
	Threard 878785664 : job 4 delay = 4
Theard 878785664 finished
	Threard 878785664 : job 3 delay = 7
	Threard 878785664 : job 4 delay = 8
Theard 878785664 finished
Theard 0 joined
Theard 1 joined
	Threard 878785664 : job 4 delay = 6
Theard 878785664 finished
Theard 2 joined

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值