[Linux] 第 12 章 POSIX 线程

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