zoukankan      html  css  js  c++  java
  • [Linux] 第 12 章 POSIX 线程

     fork调用来创建新进程的代价太高。
     *1 在进程中创建新线程
     *2 在一个进程中同步线程之间的数据访问
     *3 修改线程属性
     *4 在同一个进程中,从一个线程中控制另一个线程。
     
     @1,程序中的多个执行路线就叫做线程。线程是进程内部的一个控制序列。
     @2, 弄清楚fork系统调用和创建新线程之间的区别非常重要。
         当进程执行fork调用时,将创建出该进程的一份新副本。这个新进程有自己的
          变量,完全独立于父进程。
         创建新线程的时候,新的执行线程将有自己的桟,但与它的创建者共享全局变量,
         ,文件描述符,信号处理函数和当前目录状态。
     @3,多核处理器,大多数机器在底层硬件上就已物理支持了同时执行多个线程,单核
         CPU线程同时执行就是一个幻想。
     @4,如何将用户级的线程映射到内核级的线程。
     
     ** 线程的优点和缺点
       创建新线程比建进程代价小得多。
     * 同时执行
          验证两个线程的执行是同时进行的(当然,如果是在一个单处理器系统上,线程的
          同时执行就需要考CPU在线程之间的快速切换来实现)。未介绍线程同步函数。
     * 同步
        线程同时执行,采用在它们之间进行切换的方法很笨。幸运的是,专门有一组设计好的
        函数为我们提供了更好的控制线程执行和访问代码临界区域的方法。
        二种方法 『
          1,信号量 : 看守一段代码的看门人。
          2,互斥量 : 保护代码段的一个互斥设备。
           例如 : 如果想控制任一时刻只能有一个线程可以访问一些共享内存,使用互斥量好。
        』
      @1,用信号量进行同步 『
          有两组接口函数用于信号量。一组取自POSIX的实时扩展用于线程。另一组被成为系统
          V信号量,常用于进程的同步
          Dijkstra提出了信号量的概念。
          一种最简单的信号量 : 二进制信号量。
          一种最通用的信号量 : 计数信号量。
        信号量一般常常用来保护一段代码,使其每次只能被一个执行线程运行,要完成这个工作
        就要使用二进制信号量。有时我们允许有限数目的线程执行一段指定的代码,用计数型信号量。
        原子操作 指:如果两个线程企图同时给一个信号量加1,它们之间不会互相干扰,二不像如果
        两个程序同时对同一个文件进行读取,增加,写入操作时可能会引起冲突。
      }
      ** 线程的属性
       * 假设我们在主线程继续为用户提供服务的同时创建了第二个线程,新线程的作用是将用户
         正在编辑的数据文件进行存储备份,备份结束,第二个线程就可以直接终止了!
      ** 取消一个线程
        * 一个线程可以要求另一个线程终止,就像给它发送一个信号一样!
      ** 多线程
      总结 : 如何在一个进程中创建多个执行线程,每个线程共享着文件范围的变量,
       。线程对关键代码和数据的两种访问控制方法 ---- 使用信号量和互斥量。
       如何控制线程的属性,如何才能将子线程与主线程分离开来,使主线程无需等
       待它创建的子线程终止运行。
  • 相关阅读:
    分享:TreeFrog 1.3 发布,基于 C++/QT 的 Web 框架
    Linux环境进程间通信(五): 共享内存(上)
    TUP第二期:架构师王鹏云演讲实录 _业界_科技时代_新浪网
    发布我的倒排索引 C/C++ ChinaUnix.net
    操作系统内存管理——分区、页式、段式管理
    内存管理内幕
    IT农民工如何来美国工作
    来自 王斌 (@iwangbin) 的推文
    ScheduledExecutorService执行周期性或定时任务
    PHP XML parse error: Extra content at the end of the document
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787038.html
Copyright © 2011-2022 走看看