Linux中多线程编程并传递多个参数

             Linux中多线程编程并传递多个参数实例是本文讲解的内容,不多说,先来看内容。今天实验了Linux下的多线程编程,并将多个参数传递给线程要执行的函数。


      以下是实验程序的源代码:

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

struct argument
{
	int num;
	char string[30];
};
int main()
{
	int i,ret;
	
	void *thread1_func(void *);
	void *thread2_func(void *);
	void *thread_return1,*thread_return2;/*用来接收两个线程退出后的返回值*/
	
	pthread_t thread1,thread2;
	
	struct argument arg1,arg2;
	
	arg1.num=1949;
	strcpy(arg1.string,"中华人民共和国成立");
	arg2.num=2009;
	strcpy(arg2.string,"建国六十周年");
	
	pthread_create(&thread1,NULL,thread1_func,(void *)&arg1);
	pthread_create(&thread2,NULL,thread2_func,(void *)&arg2);
	
	for(i=0;i<=2;i++)
	{
		printf("我是最初的进程!\n");
		sleep(2);
	}
	
	ret=pthread_join(thread1,&thread_return1);/*等待第一个线程退出,并接收它的返回值*/	
	if(ret!=0)
		printf("调用pthread_join获取线程1返回值出现错误!\n");
	else
		printf("pthread_join调用成功!线程1退出后带回的值是%d\n",(int)thread_return1);
	
	ret=pthread_join(thread2,&thread_return2);/*等待第二个线程退出,并接收它的返回值*/	
	if(ret!=0)
		printf("调用pthread_join获取线程2返回值出现错误!\n");
	else
		printf("pthread_join调用成功!线程2退出后带回的值是%d\n",(int)thread_return2);
	return 0; 
} 
void *thread1_func(void *arg)
{
	int i;
	struct argument *arg_thread1;/*这里定义了一个指向argument类型结构体的指针arg_thread1,用它来接收传过来的参数的地址*/
	
	arg_thread1=(struct argument *)arg;
	
	for(i=0;i<=3;i++)
	{
		printf("我来自线程1,传递给我的参数是%d,%s。\n",(*arg_thread1)。num,(*arg_thread1)。string);
		sleep(2);
	}
	return (void *)123; 
}

void *thread2_func(void *arg)
{
	int i;
	struct argument arg_thread2;/*这里定义了一个argument类型的结构体arg_thread2,用来接收传过来的指针参数指向的值。 这种方法和thread1_func函数中的方法都是可行的*/
	
	arg_thread2=*(struct argument *)arg;
	
	for(i=0;i<=3;i++)
	{
		printf("我来自线程2,传递给我的参数是%d,%s。\n",arg_thread2.num,arg_thread2.string);
		sleep(2);
	}
	return (void *)456;
}


//小结:

在多线程的使用过程中,当我们需要传递多个参数的时候,一般的比较好的方法就是定义一个结构体,把所有需要传递的数据,放在这个结构体中,然后打包,强制转化为void类型,在接受的函数中,我们再进行强制类型转换为我们所需要的数据。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值