首页 > 编程知识 正文

锁和信号量的区别,信号停止锚定序列

时间:2023-05-05 17:25:40 阅读:116919 作者:2886

进程和线程同理

原子操作共享数据为单体变量时,请尝试使用原子操作指令;

例如,a

中断一个CPU中的多个进程并同时运行,使用中断进行切换。 如果关闭中断,则只有一个进程正在运行此关键代码,其他进程无法切换运行。 运行此代码后,打开中断,然后切换到其他进程运行。

注意解决CPU中断关闭/打开嵌套调用问题;

自旋锁定自旋锁定和排他锁定的区别link

旋转锁定解决多个CPU,如果多个进程并行运行

多个进程访问相同的物理存储器地址,并且先访问判断为0的进程将进程锁定设置为1,以执行关键代码;

在其他进程陷入访问并被确定为1的进程中,死循环;

运行关键节的进程将地址设置为0,其他进程去争夺;

注意的是在自旋锁定过程中确保锁定变量的读取、判断和锁定的操作由原子来执行;

信号(等待、独占、唤醒)信号可以解决正在旋转锁定的其他无法运行的进程持续轮询的问题。 如果继续进行此轮询,CPU将无法切换到运行不需要运行此关键节的其他进程,从而导致效率低下。

在多CPU环境中,没有获得旋转锁定的CPU在循环读取锁定变量并确定其是否被锁定的过程中浪费了CPU资源。 为了解决这个问题,引入了信号。

首先,每个进程都竞争信号量

未获取信号的流程将被排队等待,以便该流程所在的CPU可以执行其他业务流程。

获取信号的进程运行后,释放信号,然后同时唤醒队列中的进程。 这样,等待的过程将再次竞争信号量。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。