线程第二部分

一、线程退出

1.线程结束方式:

        1.pthread_exit     

        2.在线程执行函数中return    (此时与1式相等)

        3.pthread_cancel:

        4.任何一个线程调用了exit 或者 主线程main函数return 都会使进程结束

2.pthread_cancel:int pthread_cancel()pthread_t     thread);

 参数:thread: 表示所要取消线程的tid号

成功返回0      失败返回错误码

3.线程资源回收:

        1.pthread_join 需要自己回收 --线程的属性可结合性 一般是子线程在较短时间内运行完

        2.pthread_detach 可分离属性 --子线程运行很久才结束 - 设置分离属性一般为系统回收

4.pthread_detach:int    pthread_detach(pthread_t    thread) ;

参数:thread :要分离线程的tid

成功返回0     失败返回错误码

一般在线程创建好后立马分离,以防线程运行过快而在未分离前结束

二、线程与进程对比

1.        线程   :      CPU执行的最小单位

           进程   :      资源分配和任务调度基本单位

2、各自特点(优缺点)

        1.创建 和 调度

           线程:创建速度快 调度速度快 //并发程度更高

        2.安全性

       线程:优点:共享了进程的数据空间         共享数据方面 方便

                缺点:  安全性不好

                    带来资源竞争     (专门的技术解决资源竞争 ---互斥 同步)

      进程(进程空间相互独立):

                优点:安全性好

                缺点:进程间共享数据不方便         //进程间通信(管道,信号,共享内存)

3.编程

     线程(多线程)复杂程度高于进程

 4.线程间的资源竞争:

     共享资源:临界资源

     临界区:访问共享资源(临界资源)那段代码

     机制: 互斥锁:互斥 排他性 ---要么不访问 要访问就是一次完整的操作(原子操作)

        锁  :软件层面上的锁

5.锁的操作机制:定义互斥锁----初始化锁----加锁-----解锁-----销毁锁

6.定义互斥锁:    pthread_mutex_t mutex:

         互斥锁类型          斥锁变量 内核对象

初始化锁:pthread_mutex_init(); 

        参数:第一个为要初始化的互斥锁变量,第二个为属性,一般默认为NULL普通锁

加锁: pthread_mutex_lock(); (阻塞操作)

解锁: pthread_mutex_unlock();

销毁:pthread_mutex_destroy();

尝试锁:pthread_mutex_trylock();(尝试锁,避免陷入死锁)(非阻塞操作)

参数均为要操作的那把锁

7.死锁:产生的四大条件,缺一不可:

        1、互斥条件

        2、不可剥夺条件

        3、请求与保持条件

        4、循环等待条件

8.死锁处理:

        1、预防死锁

        2、避免死锁

        3、死锁检测和解除

9.线程间的顺序问题:

同步操作         强调的是线程的顺序问题

信号量         交通信号灯 实现了一种可以让线程间有序访问临界资源的方式

信号量      --- 可以顺序操作的一把锁

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值