我知道死锁在过去是一个热门的研究话题。但是,尽管我研究了许多现代操作系统,但我现在看不到任何关于死锁的主要问题。我知道一些(大多数)死锁可以由操作系统本身严格管理的资源,而且它似乎可以防止死锁,我真的没有看到任何与死锁相关的情况。我知道很多关于资源处理的特性,在不同的设计原则下,在流行的系统中处理不同,但是,它们都可以保持系统无死锁。
发布于 2017-10-06 01:23:20
尝试在您的程序中使用两个互斥,第一个线程按顺序关闭: mutex1,sleep(500 to ),mutex2,在第二个线程中: mutex2,sleep(1000 To),mutex1。
在系统中。在windows (包括8.1)中,如果应用程序使用SendMessage和广播HWND_BROADCAST --如果一个应用程序挂起,您的应用程序也将处于挂起状态。另外,在DDE通信的部分情况下(包括部分程序的ShellExecute ),如果一个应用程序没有响应,您的应用程序可能处于挂起状态。
但你可以用SendMessageTimeout..。
如果进程或线程是同步的,死锁始终是可能的。进程和线程的同步是应用程序的“必拥有”元素。
还有..。系统范围死锁(Windows):在此操作之前保存所有文档。
Create HWND h1 with parent=0 or parent=GetDesktopWindow and styles 0x96cf0000
Create HWND h2 with parent=h1 and styles 0x96cf0000
Create HWND h3 with parent=h2 and styles 0x56cf0000 (here must be a child window).
Use ::SetParent(h1, h3);然后单击这些窗口中的任何一个。
系统将按循环(三角形)顺序尝试重新排序窗口。应用程序挂起,但如果任何其他应用程序尝试使用SetWindowPos,则应用程序将更新此函数的返回。任务管理器不会提供帮助,Alt+Ctrl+Del也会停止工作。百分之百的CPU使用.只有硬复位才能帮助你。
有可能防止这种情况,但必须尽快发现这种情况。
发布于 2017-10-06 03:56:12
操作系统死锁仍在发生。当系统有有限的争用资源而无法恢复时,仍然有可能出现死锁。
在linux中,看看内核停顿,当I/O没有及时发布时,就会出现这种情况。内核档在vmware和来宾操作系统之间特别有趣。
对于外部教唆者,当san系统和网络出现问题时,就会发生死锁。
新的发行版死锁经常发生,当内核成熟时,不是每个用户,而是整个社区。
有没有得到一个蓝色的屏幕或立即重启?其中一些原因是资源损失造成的。
内核是相当成熟的,并且在回收资源方面已经取得了很好的成绩,但是并不完美。
大多数现代资源处理程序现在倾向于表示为服务,而不是可锁定的对象。操作系统中的大多数资源共享依赖于单独的通道,从而减少了大部分重叠。对队列和切换的依赖程度更高,而不是共享缓冲区上的直接锁定争用。这些都是操作系统部件和部件的普遍趋势,它们有助于减少死锁的机会,但是没有办法保证死锁少的系统。
https://stackoverflow.com/questions/46454380
复制相似问题