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

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

Linux中多线程编程并传递多个参数实例是本文讲解的内容,不多说,先来看内容。 Linux下的多线程编程,并将多个参数传递给线程要执行的函数。 以下是实验程序的源代码: pthread.c

#include #include #include #include #include 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(\调用成功!线程1退出后带回的值是%d\\n\(int)thread_return1);

ret=pthread_join(thread2,&thread_return2);/*等待第二个线程退出,并接收它的返回值*/

if(ret!=0)

printf(\调用pthread_join获取线程2返回值出现错误!\\n\); else

printf(\调用成功!线程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 argumentarg_thread2;/*这里定义了一个argument类型的结构体arg_thread2,用来接收传过来的指针参数指向的值。 这种方法和thread1_func函数中的方法都是可行的*/ arg_thread2=*(struct argument *)arg; for(i=0;i<=3;i++) { printf(\我来自线程2,传递给我的参数是%d,%s。\\n\); sleep(2); }

return (void *)456;

} 以上是 pthread.c 的内容

在Linux终端下用 gcc -o pthread -lpthread pthread.c 命令进行编译,注意应该加上-lpthread

./pthread 运行结果

我来自线程2,传递给我的参数是2009,建国六十周年。

我来自线程1,传递给我的参数是1949,中华人民共和国成立。 我是最初的进程!

我来自线程2,传递给我的参数是2009,建国六十周年。 我是最初的进程!

我来自线程1,传递给我的参数是1949,中华人民共和国成立。 我是最初的进程!

我来自线程1,传递给我的参数是1949,中华人民共和国成立。

我来自线程2,传递给我的参数是2009,建国六十周年。 我来自线程2,传递给我的参数是2009,建国六十周年。

我来自线程1,传递给我的参数是1949,中华人民共和国成立。 pthread_join调用成功!线程1退出后带回的值是123 pthread_join调用成功!线程2退出后带回的值是456

可以从执行顺序看出,线程之间存在着竞争,并非是按照固定次序运行。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4