【操作系统】03.进程同步、互斥、死锁

【嵌入式八股】一、语言篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

进程线程同步、互斥

结合【嵌入式Linux中的Linux内核部分】学习

33.进程同步的方法

结合嵌入式Linux部分Linux内核中的进程同步方式一起学

同步是指在多个进程之间共享资源时,需要协调它们的执行顺序,以避免出现竞态条件等问题。以下是一些常用的进程同步方法:

临界区

临界区是指一段代码,在同一时刻只能被一个进程执行。为了保证多个进程在访问共享资源时不会产生冲突,可以使用临界区机制对共享资源进行保护。进程需要先获得对应的锁或信号量,才能进入临界区执行代码,执行完后再释放锁或信号量。

互斥锁(Mutex)

互斥锁用于保护共享资源,同一时间只允许一个进程访问共享资源。当进程需要访问共享资源时,它需要先获取互斥锁,如果互斥锁已经被其他进程获取了,那么进程就会被阻塞,直到互斥锁被释放为止。当进程完成对共享资源的访问时,它需要释放互斥锁,这样其他进程就可以访问共享资源了。

信号(Signal)

信号是一种进程间通信机制,用于在多个进程之间传递异步事件。当一个进程需要发送信号时,它可以调用发送函数,这样目标进程就会收到信号,并执行相应的处理函数。信号可以用于中断进程的执行,或者触发进程的某些行为。

信号量(Semaphore)

信号量是一种计数器,它用于保护共享资源。当进程需要访问共享资源时,它需要先获取信号量,如果信号量的值为正数,那么进程可以继续执行,同时信号量的值会减一;如果信号量的值为零,那么进程就会被阻塞,直到信号量的值大于零为止。当进程完成对共享资源的访问时,它需要释放信号量,同时信号量的值会加一,这样其他进程就可以访问共享资源了。

事件(Event)

事件是一种进程同步机制,用于在多个进程之间传递信号。当一个进程需要等待某个事件发生时,它可以调用事件的等待函数,这样进程就会被阻塞,直到事件发生为止。当另一个进程触发了事件后,它可以调用事件的通知函数,这样等待事件的进程就会被唤醒,继续执行。

条件变量(Condition Variable)

条件变量用于在多个进程之间传递信息,以协调它们的执行顺序。当一个进程需要等待某个条件成立时,它可以调用条件变量的等待函数,这样进程就会被阻塞,直到条件成立为止。当另一个进程满足了条件后,它可以调用条件变量的通知函数,这样等待条件的进程就会被唤醒,继续执行。

读写锁(Read-Write Lock)

读写锁用于保护共享资源,允许多个进程同时读取共享资源,但只允许一个进程写入共享资源。当一个进程需要读取共享资源时,它需要先获取读锁,如果没有其他进程持有写锁,那么进程可以获取读锁,同时其他进程也可以获取读锁;如果有进程持有写锁,那么进程就会被阻塞,直到写锁被释放为止。当一个进程需要写入共享资源时,它需要先获取写锁,如果没有其他进程持有读锁或写锁,那么进程可以获取写锁;否则进程就会被阻塞,直到读锁和写锁都被释放为止。

交换(Exchange)

交换是一种进程同步机制,用于在多个进程之间交换数据。当一个进程需要交换数据时,它可以调用交换函数,这样它就会被阻塞,直到另一个进程也调用了交换函数为止。当另一个进程调用了交换函数后,两个进程就会交换数据,并继续执行。

屏障(Barrier)

屏障用于协调多个进程的执行顺序,保证它们在某个点上同时开始执行或同时结束执行。当一个进程到达屏障时,它会被阻塞,直到所有进程都到达屏障为止。当最后一个进程到达屏障时,所有进程都会被唤醒,继续执行。

管程

管程是一种高级的同步机制,是一种抽象数据类型,提供了一组共享变量和一组操作共享变量的过程,保证多个进程在访问共享资源时的互斥和同步。管程封装了共享资源的访问方法,使得进程只能通过管程提供的接口访问共享资源,从而保证了共享资源的访问顺序和互斥性。管程可以使用条件变量等机制实现进程之间的同步和互斥。

两信互临,读事件,换屏管。

34.线程间同步方法有哪些?

线程安全是如何保证的

现在流行的进程线程同步互斥的控制机制,其实是由最基本的4种方法(临界区、互斥量、信号量和事件)实现的。 其他高级同步机制,例如屏障和管程,通常是基于这些基本方法实现的。

  1. 临界区是指一段代码,只能由一个线程在同一时刻执行。当一个线程进入临界区时,其他线程必须等待。通过使用互斥锁(Mutex)来实现临界区的同步。

  2. 互斥锁是一种线程同步的机制,用于保护临界区,确保同一时刻只有一个线程可以访问临界区。一个线程在进入临界区之前需要先获得互斥锁,执行完临界区的代码后再释放互斥锁,其他线程才能获得锁进入临界区。

  3. 信号量是一种用于进程或线程之间同步的机制,可以控制同时访问某个资源的进程或线程数量。通过对信号量进行P操作(减1)和V操作(加1),可以实现线程间的同步和互斥。

  4. **事件(或条件变量)**是一种同步机制,用于实现线程间的等待和通知。当一个线程在等待某个事件时,它会进入睡眠状态,等待其他线程通过通知唤醒它;当事件发生时,另一个线程会发送通知,唤醒等待的线程,让它继续执行。

35.进程互斥的软件实现

进程互斥是指在多个进程并发执行时,为了保证它们之间不会相互干扰、不会发生数据冲突等问题,需要采取一些方法来协调它们之间的访问和执行。下面介绍几种常见的进程互斥的软件实现方法:

  1. 单标志法:该方法通过设置一个公共的标志来实现进程互斥。当一个进程需要访问共享资源时,先检查标志是否被占用,如果未被占用,则将标志设置为占用状态,并进入临界区;如果已被占用,则等待其他进程释放标志。在离开临界区时,清除标志,其他进程才能获取标志。
  2. 双标志先检查法:该方法在单标志法的基础上,增加了一个等待标志。当一个进程需要访问共享资源时,先检查等待标志是否已被占用,如果未被占用,则将等待标志设置为占用状态,并检查标志是否被占用,如果未被占用,则将标志设置为占用状态,并进入临界区;如果已被占用,则释放等待标志并等待其他进程释放标志和等待标志。在离开临界区时,清除标志和等待标志,其他进程才能获取标志和等待标志。
  3. 双标志后检查法:该方法与双标志先检查法类似,但是是先进入临界区后检查等待标志,如果等待标志已被占用,则释放标志并等待其他进程释放等待标志和标志。该方法相比双标志先检查法,可以减少不必要的等待,但也可能会导致优先级反转的问题。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础【本专栏】 3.硬件篇 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
评论
4
3
分享
牛客网
牛客企业服务