Multithreading 如何在线性探测哈希表中进行并发插入?

Multithreading 如何在线性探测哈希表中进行并发插入?,multithreading,hashtable,Multithreading,Hashtable,我正在尝试编写一个多线程线性探测哈希表。有一个死锁问题,我不知道如何解决 假设哈希表有两个页面,每个页面都有若干个存储桶。两个线程要同时插入。第一个线程在第1页找到了墓碑,第二个线程在第2页找到了墓碑。但是在线程进行插入之前,它们都需要检查哈希表中是否已经存在密钥。如果密钥存在,则插入应该立即失败 在我当前的实现中,每个线程在它要写入的页面上持有写锁,然后尝试在其他页面上获取读锁。因此,线程1尝试获取第2页上的读锁(其写锁由线程2持有),线程2尝试获取第1页上的读锁(其写锁由线程1持有)。这将导

我正在尝试编写一个多线程线性探测哈希表。有一个死锁问题,我不知道如何解决

假设哈希表有两个页面,每个页面都有若干个存储桶。两个线程要同时插入。第一个线程在第1页找到了墓碑,第二个线程在第2页找到了墓碑。但是在线程进行插入之前,它们都需要检查哈希表中是否已经存在密钥。如果密钥存在,则插入应该立即失败

在我当前的实现中,每个线程在它要写入的页面上持有写锁,然后尝试在其他页面上获取读锁。因此,线程1尝试获取第2页上的读锁(其写锁由线程2持有),线程2尝试获取第1页上的读锁(其写锁由线程1持有)。这将导致死锁


在线性探测哈希表中实现并发插入的正确方法是什么?

避免死锁的诀窍是确保线程一次不会获取多个锁,或者如果必须这样做,然后确保它们都以相同的顺序获取锁。避免死锁的诀窍是确保您的线程一次不会获取多个锁,或者如果它们必须这样做,则确保它们都以相同的顺序获取锁。