首页 > 系统相关 >linux 线程的一些简答概念

linux 线程的一些简答概念

时间:2024-03-26 18:14:36浏览次数:34  
标签:访问 互斥 临界 线程 简答 linux 执行 资源

基本概念


1. 临界资源:多线程执行流共享的资源
2. 临界区:访问临界资源的代码
3. 原子性:只有完成和未完成两种状态。
4. 互斥:同一时间只能允许一个线程访问临界资源,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。可以加锁实现。加锁可以保证单个线程对临界资源的访问是原子的。
5. 同步:让线程顺序访问临界资源,避免某个线程因抢占独占临界资源
6. 线程安全:多线程执行同一代码,若执行结果是一致的就是线程安全的。
7. 可重入:函数被多个执行流调用,其执行结果一致。可重入一定是线程安全的,线程安全不一定是可重入的。


同步


当有多个线程同时执行时,可能需要线程按照一定的顺序执行,比如:线程A负责将要处理的数据读取到内存中,而线程B负责分析这些数据,此时,应该是线程A执行完毕再执行线程B才有意义,这个时候就需要进行线程的同步控制。

互斥


当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作来保证访问的安全性。


同步的实现


  当某个线程对锁的竞争能力较强,会出现该线程一直重复申请和占有资源,造成其他线程无法访问的情况。因此引入同步,让每个线程都能有效访问临界资源。
实现线程同步可以使用条件变量或者信号量。


互斥死锁


死锁的四个必要条件:
1. 互斥:同一时间,一分资源只能被一个执行流访问
2. 占有并等待:一个执行流占有一份资源(锁资源),即使自己阻塞了也不释放,使得另一个执行流无法申请该资源只能处于等待状态
3. 无法抢占(不可剥夺):执行流还未完成当前的任务,此资源无法被另一个执行流抢占
4. 循环等待:对于资源的申请是无序的,每份资源被不同的执行流占有,每个执行流都在等待其他执行进行资源释放。
破坏以上任一条件都可避免死锁


临界资源


临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。


临界区


每个进程中访问临界资源的那段代码称为临界区(criticalsection),每次只允许一个进程进入临界区,进入后,不允许其他进程进入。不论是硬件临界资源还是软件临界资源,多个进程必须互斥的对它进行访问。多个进程涉及到同一个临界资源的的临界区称为相关临界区。使用临界区时,一般不允许其运行时间过长,只要运行在临界区的线程还没有离开,其他所有进入此临界区的线程都会被挂起而进入等待状态,并在一定程度上影响程序的运行性能。

 

线程间通信的方式

(1)信号量

(2)读写锁

(3)条件变量

(4)互斥锁

(5)自旋锁

 

参考: https://mp.weixin.qq.com/s/n7o09v3y_lLTiKC92MYAaA

 

标签:访问,互斥,临界,线程,简答,linux,执行,资源
From: https://www.cnblogs.com/weijian168/p/18097244

相关文章

  • Linux系列之统计某个字符串出现次数并排序
    业务场景最近遇到一个流量异常调用的接口,所以需要通过后台日志查看接口调用情况,先统计今天内接口的调用次数,再具体到对应的设备号,就知道哪台设备有问题了,初步想到wc和awk命令来筛选统计,但是真正去写的时候,发现很多写法都不太记得了,所以花了点时间去查手册,找资料,现在整理成......
  • windows/Linux 防火墙安装配置规则
    现阶段常见的防火墙属于具有安全操作系统的防火墙,例如:NETEYE、NETSVREEN、TALENTIT等。防火墙的基本类型一、网络层防火墙←网络层防火墙可视为一种IP封包过滤器,运作在底层的TCP/IP协议堆栈上。可以以枚举的方式只允许符合特定规则的封包通过,其余的一概禁止穿越防火墙(病毒除......
  • 2. Linux常用命令
    学习目的Linux下有非常丰富的命令,可以用来完成大部分重要的Linux服务器操作维护功能,而且至今有些功能仍然通过命令操作比较方便。实际工作中,大量服务器维护工作都是工程师通过远程控制来完成的,并没有图形界面,这时维护工作都需要通过命令来完成。作为后端工程师,我们将来......
  • Java中创建线程的多种方式实例
    在Java中创建线程的方式有多种,以下是几种常见的创建线程的方式,选择哪种方式取决于具体的需求和设计。需要注意的是,在使用多线程时,要确保线程安全,避免出现并发问题。1、普通Thread创建//继承创建线程staticclassNewThreadextendsThread{@Override......
  • Linux V4l2简单使用
    V4L2:VideoforLinuxtwo,缩写Video4Linux2,是Linux内核中的一个框架,提供了一套用于视频设备驱动程序开发的API。它是一个开放的、通用的、模块化的视频设备驱动程序框架,允许Linux操作系统和应用程序与各种视频设备(如摄像头、视频采集卡等)进行交互。V4L2提供了通用的API,使......
  • Linux Mint下Qt Creator无法输入中文解决办法
    ubuntu下有对应的fcitx-frontend-qt6软件包,直接安装就能解决问题。但是linuxmint只有基于qt5的,目前使用Qtonlineinstaller安装的QtCreator是基于Qt6.6编译的所以,只能自己编译对应的fcitx-frontend-qt6动态库,然后放到对应目录下首先下载对应的源码gitclonehttps://github......
  • 异步VS多线程
    前段时间面试的时候被问到了异步和多线程的区别,回答的模棱两可,今天花时间系统的了解了下,如有错误,欢迎斧正~异步与多线程是在并发编程中两个比较关键的概念, 很容易弄混淆:异步编程(Asynchronous)概念:异步编程是并发编程的一种形式,即在程序运行逻辑中,一部分语句可以独立于主程序而......
  • C# 线程相关一点杂记
    相信很多人在实际开发中是不愿使用到多线程的,因为一旦引入多线程这个概念,对应功能就需要加很多关于线程的考虑措施,如锁,任务回调顺序等等。有事加了一些对应的措施,还是感觉程序出现偶发的不同问题,这里主要记录一下多线程任务时需要注意的一些毫秒相关的事情。for(inti=0......
  • linux添加目录到环境变量中
    步骤一、/etc/profile文件进入编辑模式执行如下命令让/etc/profile文件进入编辑模式。sudovim/etc/profile步骤二、添加内容在文件的最后一行添加如下内容:PATH=$PATH:/home/fenglv/software/installed/bin/其中/home/fenglv/software/installed/bin/为要添加的目录,如2-2......
  • Linux调试小技巧总结
    1如果你是release运行时出问题,很难复现请,参考我的这篇博客,在编译之初做好准备  https://www.cnblogs.com/8335IT/p/18079295  linux上编译release并剥离调试信息  配合gdbattachpid/c/breakXXX.cpp:lineNo./s/n/pstack等在线调试(root)2如果你是测试过程中发现crash......