线程第二部分

server/2024/9/23 6:29:52/

一、线程退出

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.线程间的顺序问题:

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

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

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


http://www.ppmy.cn/server/103126.html

相关文章

构建多商户AI智能名片小程序创意内容库的策略与实践

摘要:在数字化转型的浪潮中,多商户AI智能名片小程序凭借其高效、智能、个性化的特点,成为了企业市场推广与用户互动的新宠。然而,要保持小程序的持续吸引力和用户粘性,构建一个内容丰富、创意独特的创意内容库显得尤为…

pip install 遇到ValueError: check_hostname requires server_hostname的解决办法

我需要下载Cython来将py编译成c,结果在pip install的时候报错这个: ERROR: Exception: Traceback (most recent call last):File "F:\Anaconda3\envs\DouyinLive32\lib\site-packages\pip\_internal\cli\base_command.py", line 173, in _mai…

【LeetCode热题100】双指针

class Solution { public:void moveZeroes(vector<int>& nums) {int dst -1,cur 0;while(cur<nums.size()){if(nums[cur] 0){cur;}else{swap(nums[dst1],nums[cur]);cur;dst;}}} }; 题目分析&#xff1a;对于数组分块/数组划分的问题&#xff0c;我们可以使用双…

0815,析构函数,拷贝构造函数,赋值运算符函数

来自同济医院的问候 目录 01&#xff1a;对象创建 001.cc 003size.cc 02&#xff1a;对象销毁 004pointer.cc 005destroytime.cc 03&#xff1a;本类型对象的复制 3.1 拷贝构造函数 006cp.cc 007cptime.cc 008recursion.cc 009rightleft.cc 3.2 赋值运算符函数 …

Linux之进程间通信(下)

目录 命名管道 命名管道的创建 匿名管道和命名管道的区别 命名管道的代码实现 共享内存 创建共享内存 关联共享内存 去关联共享内存 删除共享内存 共享内存特点 共享内存代码实现 IPC资源总结 命名管道 上期我们学习了匿名管道&#xff0c;匿名管道本质就是一个…

【初阶数据结构】算法复杂度

目录 一、算法效率 1.1 为什么要衡量算法的好坏 1.2 算法的复杂度 1.3 复杂度在校招中的考察 二、时间复杂度 2.1 时间复杂度的概念 Func1 执行的基本操作次数 &#xff1a; 2.2 大O的渐进表示法 常见复杂度对比 一般算法常见的复杂度如下&#xff1a; ​编辑 2.3常…

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号&#xff1a; 型号 ASUS FX53VD&#xff08;华硕-飞行堡垒&#xff09; 板号&#xff1a;GL553VD 故障情况描述&#xff1a; 键盘无法使用&#xff0c;键盘除开机键外…

bootchart抓Android系统启动各阶段性能数据

最近在做Android系统启动优化&#xff0c;首要任务是找到启动过程中各阶段耗时点&#xff0c;进而有针对性地进行优化。主要用bootchart抓开机数据&#xff0c;本文主要记录下工具的使用方法。 1.抓开机数据 adb root adb shell ‘touch /data/bootchart/enabled’ adb rebo…