进程和线程同理
原子操作共享数据为单体变量时,请尝试使用原子操作指令;
例如,a
中断一个CPU中的多个进程并同时运行,使用中断进行切换。 如果关闭中断,则只有一个进程正在运行此关键代码,其他进程无法切换运行。 运行此代码后,打开中断,然后切换到其他进程运行。
注意解决CPU中断关闭/打开嵌套调用问题;
自旋锁定自旋锁定和排他锁定的区别link
旋转锁定解决多个CPU,如果多个进程并行运行
多个进程访问相同的物理存储器地址,并且先访问判断为0的进程将进程锁定设置为1,以执行关键代码;
在其他进程陷入访问并被确定为1的进程中,死循环;
运行关键节的进程将地址设置为0,其他进程去争夺;
注意的是在自旋锁定过程中确保锁定变量的读取、判断和锁定的操作由原子来执行;
信号(等待、独占、唤醒)信号可以解决正在旋转锁定的其他无法运行的进程持续轮询的问题。 如果继续进行此轮询,CPU将无法切换到运行不需要运行此关键节的其他进程,从而导致效率低下。
在多CPU环境中,没有获得旋转锁定的CPU在循环读取锁定变量并确定其是否被锁定的过程中浪费了CPU资源。 为了解决这个问题,引入了信号。
首先,每个进程都竞争信号量
未获取信号的流程将被排队等待,以便该流程所在的CPU可以执行其他业务流程。
获取信号的进程运行后,释放信号,然后同时唤醒队列中的进程。 这样,等待的过程将再次竞争信号量。