首页 > 其他分享 >线程第二部分

线程第二部分

时间:2024-08-15 21:54:50浏览次数:13  
标签:第二 互斥 死锁 mutex pthread 进程 线程 部分

一、线程退出

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

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

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

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

标签:第二,互斥,死锁,mutex,pthread,进程,线程,部分
From: https://blog.csdn.net/chdtu/article/details/141232225

相关文章

  • Java创建线程的方式
    1.继承Thread类第一步,创建一个线程类并继承Thread类第二步,重写run()方法,内部自定义线程执行体第三步,创建自定义的线程类对象,调用start()方法,启动线程示例代码如下publicclassMyThread1extendsThread{@Overridepublicvoidrun(){for(inti=0;i<......
  • Java学习的第二天
    今天接着上篇的Java内容继续。首先说一下开发Java的注意事项:1、Java开发是以.Java为拓展名,源文件的基本组成是类(class)。2、应用程序的执行入口是main()方法,且有固定的书写模式:publicstaticvoidmain(String[]args){...}.3、严格区分大小写。4、Java方法是以一条条语句......
  • 20240815有名管道双端线程通信
    //端1#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#include<pthread.h>#include<errno.h>#include<......
  • Linux线程
    一、线程的基本操作pthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg) :此函数用于创建新线程。thread 用于存储新创建线程的标识符,attr 可指定线程属性,start_routine 是线程执行的函数指针,arg 为传递给线程执行......
  • miniomp.dll丢失全方位指南:解锁多线程应用程序的高效修复策略
    解决miniomp.dll丢失的问题,可以遵循以下专业步骤来确保多线程应用程序正常运行:1.手动下载miniomp.dll:•首先,从可信赖的DLL下载站点或软件供应商处找到适合您操作系统的miniomp.dll文件。请务必谨慎选择来源,以避免潜在的安全风险。2.放置DLL文件至正确路径:•将下载......
  • 【问题解决】PageOffice打开word文档报错:Office运行时错误,部分系统文件可能丢失或已损
    打开wps,右上角配置和修复工具取消勾选,确定再打开,重新勾选,确定,退出重启电脑,验证。--PS:本人自测成功,有些人的机器安装有MicrosoftOffice,取消之后(不需要重新勾选)就可以了;本人机器只安装了WPS适合这种操作。......
  • 网络安全实训第二天
    1.业务逻辑漏洞注册一个账号在输入购买数量的输入框中输入-1并提交,然后点击提交订单提交订单后查看余额,发现账号多出6000元,漏洞利用成功2.更改支付金额在选定一个商品之后,使用BP拦截提交订单的请求,并找到价格修改为0查看用户下单界面单价是否为0点击提交订......
  • 线程池使用场景 调用多个微服务汇总数据
    importlombok.SneakyThrows;importjava.text.SimpleDateFormat;importjava.util.concurrent.*;publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){shopping_threadPool();}/*汇总数据使用线程池+Future耗时≈所有......
  • 线程池 种类
    fixedsinglecachedimportjava.util.concurrent.*;publicclassT{publicstaticvoidmain(String[]args){ExecutorServicethreadPool=getFixedThreadPool();for(inti=0;i<8;i++){threadPool.submit(newMyTask......
  • 第二十五篇 - Cpolar内网穿透
    参考链接:https://blog.csdn.net/fq157856469/article/details/137644808一、下载Cpolar1.下载网址:https://www.cpolar.com/download会得到一个cpolar_amd64.msi,双击安装,中途可以修改安装路径2.注册账号需要填写,用户名、邮箱、电话、密码。注册后选择免费套餐确认。二、Cpo......