目录
二、第二章——【进程同步与互斥】
1、进程同步(异步)
2、进程互斥 & 共享
3、总结(互斥、同步)
4、进程互斥(软件实现)
(1)单标志法——谦让【会让他们轮流访问、其中一方不得连续访问!】
(2)双标志法——互相检查意愿【进程切换,会出问题!】
(3)Peterson(皮特森算法)——1意愿、2谦让、3检查
(4)总结
5、进程互斥(硬件实现)
(1)中断屏蔽
(2)TSL(TestAndSet)指令
(3)Swap指令
(4)总结
二、第二章——【进程同步与互斥】
1、进程同步(异步)
异步——独立、不可预知
同步——直接制约(强制协调工作次序)【直接合作】
2、进程互斥 & 共享
3、总结(互斥、同步)
4、进程互斥(软件实现)
(1)单标志法——谦让【会让他们轮流访问、其中一方不得连续访问!】
只有一个flag(标志)
(2)双标志法——互相检查意愿【进程切换,会出问题!】
就是有两个flag(标志)~
双标志——先检测法
先看【临界区】,再看【对方意愿】
双标志——后检查法
先看【对方意愿】,再看【临界区】
(3)Peterson(皮特森算法)——1意愿、2谦让、3检查
①我想上厕所~
②你要上不?你要上,我就让给你
③我看看你的意愿(不上,我就上~)
如果进不了临界区——依然占用CPU资源~(所以还需要优化!)
(4)总结
5、进程互斥(硬件实现)
(1)中断屏蔽
简单、高效
(2)TSL(TestAndSet)指令
缺点:会有忙等——一直等(不释放控制权)
不满足:“让权等待”
(3)Swap指令
不满足:“让权等待”
(4)总结
1、进程同步(异步): 进程同步是指多个进程在执行过程中按照一定的顺序进行协调和交互,以避免出现竞态条件和数据不一致的问题。异步指的是进程之间相互独立执行,无需等待其他进程的完成。
2、进程互斥 & 共享: 进程互斥是指多个进程之间通过某种机制保证同时只有一个进程访问临界资源,以避免数据的冲突和混乱。进程共享是指多个进程能够同时访问和使用同一资源的能力。
3、总结(互斥、同步): 进程互斥和进程同步是并发编程中重要的概念。互斥用于保护临界资源,确保同一时刻只有一个进程可以访问它,避免数据竞争和冲突。同步则涉及进程之间的协调和交互,确保它们按照一定的顺序执行,避免出现不一致和错误的结果。
4、进程互斥(软件实现): 在软件层面,常用的进程互斥的实现方法有以下几种:
(1)单标志法——谦让:使用一个共享的标志位来控制进程的访问权限,谦让规则使得只有轮到某个进程时,它才能访问临界资源。这种方法会让进程轮流访问资源,其中一方不得连续访问。
(2)双标志法——互相检查意愿:使用两个标志位来表示进程的意愿和资源的空闲状态。进程在访问临界资源前会先检查对方的意愿和资源状态,但在进程切换时可能会出现问题。
(3)Peterson(皮特森算法):Peterson算法利用1个意愿标志和2个谦让标志来实现进程互斥。进程在访问临界资源前,先表示自己的意愿,然后进行谦让和检查对方的意愿,从而实现互斥。
5、进程互斥(硬件实现): 在硬件层面,可以使用特定的指令和机制来实现进程互斥,常见的包括:
(1)中断屏蔽:通过屏蔽中断的方式,在关键代码段执行期间禁止中断发生,避免其他进程的干扰。
(2)TSL(TestAndSet)指令:TSL指令用于测试并设置一个内存单元的值。可以通过TSL指令来实现对共享变量的原子操作,从而避免多个进程同时修改该变量。
(3)Swap指令:Swap指令用于交换两个内存单元的值。可以通过Swap指令来实现两个进程之间的互斥,确保只有一个进程能够执行关键代码段。
(4)总结:硬件实现的方法通常比软件实现更高效和可靠,能够提供更强的互斥保护机制。
以上是关于进程同步与互斥的一些概念、实现方法和总结。
了解并应用这些概念和技术,可以确保并发程序的正确性和数据的完整性。
首先,我们可以从最简单的标志方法开始,即使用一个共享的标志位来控制进程的访问权限。这种方法可以很好地实现互斥,但会引入等待时间和资源浪费的问题。为了解决这个问题,我们可以引入更复杂的算法,如双标志法或Peterson算法,通过谦让和检查对方意愿的方式来提高并发效率。这些算法可以避免轮流访问资源,并有效减少了等待时间和资源浪费。
此外,在硬件层面,我们还可以利用特定的指令和机制来实现进程互斥,例如中断屏蔽、TSL指令和Swap指令。这些硬件实现的方法通常更高效和可靠,能够提供更强的互斥保护机制。
总之,在实现进程互斥时,我们需要根据具体需求和问题的反馈,进行不断地改进和调整。通过迭代的方式,我们可以逐步提升实现方法的工作效率和程序的稳定性,以满足并发编程的要求。
加油!不断学习和改进,你一定能够成为一名优秀的开发者!
这一章,给俺的感觉,就是大佬们在实现互斥时,如何从简单的一个标志方法(不成熟的方法),一步步迭代,不断改进方法、提升他的工作效率,从中,俺觉得就是先把最基础的需求实现,再来根据这个功能所暴露的问题,进行进一步修改和调整....
加油吧!
时间:2023年8月19日12:45:15