下面是我在一次采访中被问到的问题,我相信这个问题有很多解决方案,但我想知道什么是最好的解决方案(stackoverflow 非常适合这个问题:))。
问:我们有一个树状结构并有三个线程。现在我们必须执行三个操作:插入、删除和查找。你将如何设计这个?
我的方法:我将使用互斥锁进行插入和删除操作,因为我希望一次只执行一个线程插入或删除。而在查找的情况下,我将允许所有三个线程进入函数但保留一个计数(计数信号量),以便这次无法执行插入和删除操作。同样,当插入或删除操作进行时,不允许线程进行查找,插入和删除的情况相同。
现在他交叉质疑我,因为我一次只允许插入一个线程,所以如果需要插入不同叶子上的两个节点,那么我的方法仍然一次允许一个,这会卡住。
我的方法好吗?还有什么其他方法?