今日主要学习线程和线程的互斥锁
pthread_cancel函数
它用于取消一个线程,当一个线程收到取消的申请时,他不会立即停止,而是在下一个取消点处结束运行,取消点是程序中一个特定的位置。如果线程在执行一个不可中断的系统调用,他将执行一到调用完成。

pthread_detach函数
 可分离属可分离属性    ---子线程运行很久才结束 ---  设置分离属性
可分离属可分离属性    ---子线程运行很久才结束 ---  设置分离属性 
功能:
          分离线程 
     参数:
         thread 要分离的线程的tid
     返回值:
           成功 0
         失败 错误码 
总结
 1.创建 -- pthread_create 
 2.执行 -- 线程执行函数 
 3.退出 -- pthread_exit 
           return  //线程执行函数中 
           pthread_cancel 
           exit() //return 从main   
 4.资源回收 
        可结合性 --- pthread_join    //这种用于 ,线程任务较短,主线程需要关心子线程状态 
        可分离性 --- pthread_detach  //子程序执行任务较长,主线程也不需要关心子线程状态 
对比 线程 和 进程
1.线程 vs 进程 
 线程 CPU执行的最小单位 
 进程 资源分配和任务调度基本单位 
2. 各自特点 (优缺点)
 //1.创建 和 调度
   线程 
       创建速度快 
       调度速度快 
       
       //并发程度 更高 
       
  //2. 安全性 
     
     线程 
         好处:共享了进程的数据空间 
         共享数据方面 方便 
         缺点:
           安全性不好                   //
           带来资源竞争                //专门的技术 解决资源竞争  --- 互斥 同步 
     进程 
         进程空间相互独立 
         好处,
             安全性好 
         缺点:
             进程间共享数据不方便      //进程间通信   (管道,信号,共享内存)
       互斥锁           
 
定义互斥锁:
     pthread_mutex_t   mutex;
     互斥锁类型        互斥锁变量 内核对象 
     
    初始化锁
     pthread_mutex_init(); //初始化一把锁    
     
    参数:
       @mutex     //就是要初始化的 互斥锁变量 
       @attr      //属性  
                  //NULL 默认属性  --- 普通锁 
                  //读写锁 
    加锁                      //加锁 加在 要访问临界资源的地方 
        pthread_mutex_lock(); //上锁 
    解锁 
        pthread_mutex_unlock(); //解锁  临界资源访问之后就解开
    销毁
        pthread_mutex_destroy();//销毁一把锁 

 参数:
           @mutex    //要操作的那把锁 
线程间的顺序问题:
 //同步操作 
强调的是线程的 顺序问题 
 信号量     //交通信号灯 
            //实现一种可以让线程间有序访问临界资源的方式
    
 信号量   --- 可以顺序操作的一把锁



















