首页 > 试题广场 >

内存条

[编程题]内存条
  • 热度指数:1065 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

在很多存储模型中,内存池是使用循环队列来实现的。一个内存池可以看成一个环型的内存空间。现在有一个大小为L字节的内存池,用户会对它进行读和写两种操作。每次写会从当前存储位置的末尾向后空余的位置写入W比特的数据;每次读会从当前存储位置的开头读取R比特的数据,然后将这些位置的数据释放。所以任意时刻在内存中存储有数据的位置都是连续的一段。

读和写操作是会被堵塞的,比如当剩余的内存空间不足W比特时,写操作就会被堵塞,等待读操作进行直到剩余空间不小于W比特;读操作也是类似。但是存在一种情况,系统会发生死锁,即当前剩余空间不足W比特写操作无法进行;但是当前存储的数据也不足R比特,读操作也无法进行。这时系统就陷入了死锁。现在你需要帮助判断一下某个系统是否有可能发生死锁,初始时内存池是空的。


输入描述:
第一行包含三个整数L,R,W。1≤L,R,W≤1018,R,W≤L


输出描述:
若会发生死锁,输出DEADLOCK;否则输出OK。
示例1

输入

5 3 4

输出

DEADLOCK
示例2

输入

5 2 3

输出

OK
头像 白伟仝
发表于 2020-07-25 11:07:17
分R==W、R<W、R>W三种情况 import java.util.*; public class Main { public static void main(String[] args) throws Exception{ Scanner sc = new 展开全文
头像 bandiaoz
发表于 2024-12-21 20:28:02
解题思路 这是一个内存读写死锁判断问题。关键点如下: 内存是环形的,总大小为 每次写入 字节,每次读取 字节 需要判断在什么情况下会发生死锁 判断逻辑: 如果 或 大于 ,必然死锁 如果 ,可以交替读写,不会死锁 如果 ,需要计算累积的可用空间是否足够读取 如果 ,需要计算写满后是否 展开全文