实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1,并将该键值对标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对,若容量满则淘汰最久未使用的条目。 要求所有操作的平均时间复杂度为 O(1),并保证在多线程环境下正确运行。禁止使用`ConcurrentDictionary`或`ReaderWriterLockSlim`。需自行处理并发控制。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1,并将该键值对标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对,若容量满则淘汰最久未使用的条目。 要求所有操作的平均时间复杂度为 O(1),并保证在多线程环境下正确运行。禁止使用`ConcurrentDictionary`或`ReaderWriterLockSlim`。需自行处理并发控制。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在,则返回对应的值;否则返回-1。 2. `Put(int key, int value)`:插入或更新键值对。当缓存容量满时,应删除最久未使用的条目。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。禁止使用 `ConcurrentDictionary` 或任何内置的并发集合类型。需自行处理锁机制以避免死锁和性能瓶颈。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1。 2. `Put(int key, int value)`:插入或更新键值对。 3. 缓存容量为正整数,在初始化时指定。 要求: - 所有操作的时间复杂度必须为 O(1)。 - 多个线程并发调用 Get 和 Put 时,必须保证线程安全且不出现死锁。 - 不得使用 .NET 内置的并发集合类(如 ConcurrentDictionary),但可使用锁或其他同步机制。 请编写完整的 C# 类实现,并在注释中说明关键设计思路和线程安全处理方式……
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1。访问后该键应被标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对,若缓存已满则淘汰最久未使用的条目。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。不得使用 `ConcurrentDictionary` 或任何内置线程安全集合。需手动处理锁机制以避免死锁和性能瓶颈。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1。访问后该键应被标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对。如果缓存已满(超过容量),则移除最久未使用的项。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。禁止使用 `ConcurrentDictionary` 或任何内置线程安全集合。需自行处理锁粒度以优化并发性能。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1。访问后该键应被标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对。如果缓存容量已满,则删除最久未使用的条目。 约束条件: - 缓存容量为正整数,在初始化时指定。 - 所有操作必须在平均 O(1) 时间复杂度内完成。 - 必须保证在多线程环境下正确运行,即多个线程同时调用 Get 和 Put 时不会出现数据竞争或不一致状态。 请使用 C# 实现该缓存类,并说明关键设计决策以确保线程安全和性能。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在,则返回对应的值;否则返回 -1。 2. `Put(int key, int value)`:插入或更新键值对。如果缓存容量已满,则在插入前删除最久未使用的条目。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。不允许使用 .NET 内置的并发集合类(如 ConcurrentDictionary),但可以使用锁或其他同步机制。同时,请编写一个测试用例验证其线程安全性。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回 -1。 2. `Put(int key, int value)`:插入或更新键值对。 当缓存容量达到上限时,应删除最久未使用的条目。 要求所有操作的平均时间复杂度为 O(1),并保证在多线程环境下正确运行。不允许使用 .NET 内置的并发集合类(如 ConcurrentDictionary),但可以使用锁或其他同步机制。 请写出完整的 C# 类实现,并说明关键设计思路。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1。访问后该键应被标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对。如果缓存已满(容量为正整数 capacity),则移除最久未使用的条目。 要求所有操作平均时间复杂度为 O(1),并保证在多线程环境下正确运行。不允许使用 .NET 内置的并发集合类(如 ConcurrentDictionary),但可使用锁或其他同步机制。 请写出完整的 C# 实现,并说明关键设计决策。
实现一个线程安全的LRU缓存(Least Recently Used),要求支持以下操作: 1. `Get(int key)`:如果键存在,返回对应的值,并将该键值对移到缓存末尾表示最近使用;否则返回-1。 2. `Put(int key, int value)`:插入或更新键值对,若超出容量,则移除最久未使用的项。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。禁止使用`ConcurrentDictionary`或`ReaderWriterLockSlim`等高级同步结构,仅允许使用基础锁(lock)和标准数据结构。同时,需处理潜在的并发竞争与内存可见性问题。