实现一个线程安全的LRU缓存,要求支持O(1)时间复杂度的Get和Put操作,并且在缓存容量满时自动淘汰最久未使用的项。要求使用C#编写完整的类,不允许使用内置的LinkedList或OrderedDictionary,需自行实现双向链表和哈希表的组合结构。同时,请处理多线程并发访问场景下的竞态条件问题。
实现一个线程安全的LRU缓存,要求支持O(1)时间复杂度的Get和Put操作,并且在缓存容量满时自动淘汰最久未使用的项。要求使用C#编写完整的类,不允许使用内置的LinkedList或OrderedDictionary,需自行实现双向链表和哈希表的组合结构。同时,请处理多线程并发访问场景下的竞态条件问题。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在,则返回对应的值;否则返回-1。 2. `Put(int key, int value)`:插入或更新键值对。如果缓存容量已满,则删除最久未使用的条目。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。不允许使用 .NET 内置的并发集合类(如 ConcurrentDictionary),但可以使用锁或其他同步机制。同时,请编写一个测试用例,模拟多个线程高并发地调用 Get 和 Put 方法,验证其正确性和线程安全性。
实现一个线程安全的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),并保证在多线程环境下正确工作。 请使用 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),但可以使用锁或其他同步机制。
实现一个线程安全的LRU(最近最少使用)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在则返回对应的值,否则返回-1。访问后该键应被标记为最近使用。 2. `Put(int key, int value)`:插入或更新键值对。如果缓存容量已满,则删除最久未使用的条目。 要求所有操作的时间复杂度为 O(1),并保证在多线程环境下正确运行。请使用 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(Least Recently Used)缓存,要求支持以下操作: 1. `Get(int key)`:如果键存在,返回对应的值,并将该键值对移至缓存头部(最近使用);否则返回 -1。 2. `Put(int key, int value)`:插入或更新键值对,若缓存已满(容量为正整数 capacity),则删除最久未使用的项后再插入新项。 要求所有操作的平均时间复杂度为 O(1),并保证在多线程环境下正确运行。 请使用 C# 实现 `LRUCache` 类,并说明关键设计思路及如何保证线程安全。