今天上午实验了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("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;

}

/*********************** 以上是 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

=====================

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

linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子相关推荐

  1. linux线程多参数传递参数,Linux中多线程编程并传递多个参数

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

  2. html页面传递list参数,thinkphp中html:list标签传递多个参数实例,thinkphplist_PHP教程...

    thinkphp中html:list标签传递多个参数实例,thinkphplist 本文实例讲述了关于thinkphp中html:list标签传多个参数问题解决办法,分享给大家供大家参考.具体分析如下 ...

  3. 对linux中多线程编程中pthread_join的理解

    对linux中多线程编程中pthread_join的理解 分类: 程序员面试 linux学习2013-08-04 21:32 234人阅读 评论(0) 收藏 举报 多线程linuxpthread_jo ...

  4. linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解

    linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 ...

  5. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  6. 线程与进程、Android多线程编程

    线程与进程.Android多线程编程 目录 一.概念 1.程序 2.进程 3.并发 4.并行 5.线程 二.Android中的进程与线程 1.安卓的进程 2.安卓的线程 三.Android多线程编程 ...

  7. 汇编在嵌入式编程中的作用_如何在嵌入式Power BI报表中以编程方式传递凭据

    汇编在嵌入式编程中的作用 In the article, How to embed a Power BI Report Server report into an ASP.Net web applic ...

  8. 【嵌入式Linux】嵌入式Linux应用开发基础知识之多线程编程

    文章目录 前言 1.多线程基础编程--创建线程和使用等待函数休眠线程 1.1.程序分析--使用信号量PV操作sem_wait 1.2.程序分析--使用条件变量pthread_cond_wait 2.一 ...

  9. Linux下多线程编程互斥锁和条件变量的简单使用

    Linux下的多线程遵循POSIX线程接口,称为pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a.线程是进程的一个实体,是CPU ...

最新文章

  1. CQRS实践(3): Command执行结果的返回
  2. 易生信高级转录组分析和数据可视化-最后一天报名
  3. Hadoop MapReduce工作详细流程(Partitioner/SortComparator/GroupingComparator)
  4. 学习日记-类继承中的上下转换
  5. CSDN如何居中对齐
  6. hibernate树
  7. 【2019浙江省赛 - K 】Strings in the Pocket(马拉车,思维)
  8. php开发神器 -- phpStudy
  9. JavaScript RegExp(正则)
  10. Leetcode每日一题:217.contains-duplicate(存在重复元素)
  11. 股市舆情情感分类可视化系统
  12. 自动跑程序vbs脚本
  13. SPSS编程-统计自动化-Python脚本开发
  14. Python-常用模块有哪些
  15. 使用application对象实现网站访问量统计
  16. 网页效果图设计之色彩配色索引
  17. R数据分析:如何在R中使用mutate
  18. HTML5地理位置定位API接口开发
  19. 如何在网页上添加一个微信关注链接?(一键跳转微信关注公众号)!!注意是从外部跳到微信关注...
  20. 编写程序实现以下功能:计算1~n之间的素数并输出

热门文章

  1. Java Spring IOC用法
  2. python jieba库下载_Python中jieba库安装步骤及失败原因解析
  3. python建模分析实操_城市公交站点设置优化模型-基于Python
  4. java 快速构建ssm项目_SSM快速搭建
  5. php多条件筛选顺序_php多条件组合筛选
  6. perl转python_将行转换为perl或python中的列
  7. w7鼠标计算机无法识别,win7电脑遇见usb鼠标无法标识的详细处理步骤
  8. html语言及语法结构,HTML语法结构.ppt
  9. java json写入内存_如何在客户端上减少JSON.stringify使用的内存量?
  10. 解决谷歌浏览器F12打不开调试页面的问题。