linux高级编程之线程间的通信:(pthread_create()、pthread_self())

1.线程概念
       线程包含了表示进程内执行环境必须得信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。
        线程优点:
      ●通过为每种事件类型的处理分配单独的线程,能够简化处理异步事件的代码。每个线程在进行事件处理时可以采用同步编程模式,同步编程模式要比异步编程模式简单的多。
       ●多线程程序在单处理器上运行能够改善响应时间和吞吐量。
     
  ●在只有一个线程的情况下,单个进程需要完成多个任务时,实际需要把这些任务串行化;有了多个控制线程,相互独立的任务的处理就可以交叉进行,只需要为每个任务分配一个单独的线程,当然只有在处理过程不依赖的情况下,两个任务的执行才可以穿插进行。
       ●交互的程序同样可以通过使用多线程实现响应时间的改善,多线程可以把程序中处理用户输入输出的部分与其他部分分开。

2.线程标识
     回忆一下进程ID,它使用pid_t数据类型来表示,是一个非负整数,同样线程也有线程ID,线程则用pthread_t数据类型来表示,实现的时候可以用一个结构来代表pthread_t数据类型,所以可移植的操作系统实现不能把它作为整数处理。因此必须使用函数来对两个线程进行比较。
           pthread_equal()函数
       ● 头文件: #include <pthread.h>
           函数原型:int pthread_equal(pthread_t tid1,pthread_t tid2);
           返回值:若相等则返回非0,不相等则返回0
    ●  线程可以通过调用pthread_self()函数获得自身的线程ID。
          pthread_self()函数
          头文件:  #include<pthread.h>
          函数原型:pthread_t pthread_self(void)

3.线程创建
    直接简单明了的说吧,新增线程我们可以通过pthread_create()函数创建。
       ●   头文件:#include <pthread.h>
           
函数原型:
int  pthread_create(pthread_t  *thread,  pthread_attr_t  *attr,  void  *(*start_rtn)(void  *),  void  *arg)
            函数功能:创建一个线程
            thread:线程标识符(如:pthread_t tid)
       arrt:用于定制各种不同线程的属性,一般为NULL(默认创建线程属性)
            start_rtn:重点说明下,新创建的线程从start_rtn函数的起始地址开始运行,该函数只有一个无类型指针参数arg
,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入
      接下来是一个关pthread_create()和pthread_self()函数的一个简单例子
                
      
              
          运行结果如下:
            
            
           
从以上打印信息我们也可以得出刚开始线程概念相关的结论:进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。





笔记九:线程间的通信(pthread_create()和pthread_self())的更多相关文章

  1. Java-JUC(九):使用Lock替换synchronized,使用Condition的await,singal,singalall替换object的wait,notify,notifyall实现线程间的通信

    Condition: condition接口描述了可能会与锁有关的条件变量.这些用法上与使用object.wait访问隐式监视器类似,但提供了更强大的功能.需要特别指出的是,单个lock可能与多个Co ...

  2. iOS开发多线程篇—线程间的通信

    iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...

  3. Java核心知识点学习----多线程并发之线程间的通信,notify,wait

    1.需求: 子线程循环10次,主线程循环100次,这样间隔循环50次. 2.实现: package com.amos.concurrent; /** * @ClassName: ThreadSynch ...

  4. java多线程详解(6)-线程间的通信wait及notify方法

    Java多线程间的通信 本文提纲 一. 线程的几种状态 二. 线程间的相互作用 三.实例代码分析 一. 线程的几种状态 线程有四种状态,任何一个线程肯定处于这四种状态中的一种:(1). 产生(New) ...

  5. iOS边练边学--多线程NSOperation介绍,子类实现多线程的介绍(任务和队列),队列的取消、暂停(挂起)和恢复,操作依赖与线程间的通信

    一.NSOperation NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加 ...

  6. 新建线程与UI线程间的通信

    现在用一个实例来演示一下自己的新建线程与UI线程间的通信. UI界面包含3个控件: 一个输入框,用来输入数字: 一个显示框,用来显示从2开始,到输入数字之间的所有质数: 一个按钮,点击后获取输入框输入 ...

  7. C# 线程间互相通信

    C#线程间互相通信主要用到两个类:AutoResetEvent和ManualResetEvent. 一.AutoResetEvent AutoResetEvent 允许线程通过发信号互相通信,线程通过 ...

  8. QThread与其他线程间相互通信

    转载请注明链接与作者huihui1988 QThread的用法其实比较简单,只需要派生一个QThread的子类,实现其中的run虚函数就大功告成, 用的时候创建该类的实例,调用它的start方法即可. ...

  9. Handler不同线程间的通信

    转http://www.iteye.com/problems/69457 Activity启动后点击一个界面按钮后会开启一个服务(暂定为padService),在padService中会启动一个线程( ...

  10. Java多线程中线程间的通信

    一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.u ...

随机推荐

  1. ARM体系与架构【一】

    由于笔试题(摩尔线程笔试题)也出现了相关的题目,所以也顺便为此做一点点小准备. 1.ARM用什么类型的指令集 ARM架构用的是RISC精简指令集. 2.RISV与RISC指令集有什么区别 3.ARM架 ...

  2. A better jump —— 优化游戏中的跳跃

    之前一提起角色的跳跃,想当然的想法就是:给角色一个向上的初速,然后由Unity的物理系统接管就好了嘛,这样忽略空气摩擦的影响,根据重力加速度,角色向上跳到最高点的时间和由最高点落下的时间相等,不是很合 ...

  3. 总结Unity查找物体的几种方法

    Unity中经常需要查找对象,对应的API也有好几种,各自有不同的适用场合. 1. GameObject.Find 通过名字或路径查找游戏对象. GameObject.Find("GameO ...

  4. DNS CNAME limitations cname 在哪些情况下不能配置

    https://www.rfc-editor.org/rfc/rfc1912.html https://www.rfc-editor.org/rfc/rfc2181.html 说明: domain n ...

  5. java8 stream按某个字段分组,允许分组字段是null

    Map<String, List<Dto>> deviceMap = deviceList.stream().collect(Collectors.groupingBy(Dto ...

  6. SXSSFWorkbook 表格内换行

    起因 导出的excel需要在表格内换行,但搜索到的方法都实现不了我的需求,经同事搜查得知,这是POI的一个bug,已经在17年八月后被解决. 生成方式 pom依赖 <dependency> ...

  7. Strus框架

    一.框架概述 1.框架的意义与作用: 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面. 特点:封装了很多细节,程序员在使用的时候会非常简单. 2 ...

  8. Javaweb学习笔记第七弹

    Maven依赖范围 对于Maven的安装配置等环境准备问题,可详细参考我的前几篇博客, 网址1:https://www.cnblogs.com/liuzijin/p/16654344.html 网址2 ...

  9. nginx配置反向代理服务器,实现在https网站中请求http资源

    网站使用nginx作为服务器,协议从http升级为https的注意事项. 具体升级步骤请点击搜索 1.首先,修改宝塔面板配置 选择配置文件,http请求重定向为https.所有80端口请求都重定向为h ...

  10. Vue-Router 路由与配置

    ​现在的很多应用都流行SPA应用(singe page application) . 传统的项目大多使用多页面结构,需要切换内容的时候我们往往会进行单个html文件的跳转,这个时候因受到网络.性能的影 ...