如果我们在现代计算机上使用Peterson的解决方案来解决关键部分问题,会发生什么情况?我的理解是,由于内存读取和写入相对于内存中其他读取和写入的顺序,具有多个CPU的系统可能会遇到困难,但这是大多数现代系统的问题吗?使用信号量VS互斥锁有什么好处?
嘿,有趣的问题!因此,基本上为了理解您的要求,必须确保您知道自己的要求。的关键部分是不应该同时用任何超过该程序的进程或线程一次一个执行的程序的只是一部分。不允许进行多个并发访问,因此,这意味着一次仅一个进程与系统交互。通常,此“关键部分”访问诸如数据结构或网络连接之类的资源。
互斥或互斥只是描述一次关键部分中一次只有一个并发进程的要求,因此对共享数据的并发访问必须确保这种“互斥”。
因此,这就引入了问题!我们如何确保进程完全独立于其他进程运行,换句话说,如何确保线程对各个关键部分的“原子访问”?
“临界区问题”有几种解决方案,但是您提到的是彼得森的解决方案,因此我们将对此进行讨论。
Peterson的算法专为互斥而设计,允许两个任务共享一次使用的资源。他们使用共享内存进行通信。
在算法中,两个任务将争夺关键部分。您需要更多地研究互斥体,绑定等待和其他属性,才能全面理解,但仅仅是在彼得森的方法中,一个过程等待1圈和1圈才能进入临界区,如果它优先处理其他任务或流程,则该流程将运行至完成,从而允许其他流程进入关键部分。
那是最初提出的解决方案。
但是,这不能保证可以在当今的多处理现代体系结构上工作,并且只能用于两个并发任务。在现代计算机上进行读写操作时比较麻烦,因为它具有乱序的执行类型,因此有时顺序操作会以不正确的顺序发生,因此存在局限性。我建议您也看看锁。希望有帮助:)
其他人还能想到我可能错过的任何补充吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句