Redian新闻
>
请教一个多线程设计的面试题
avatar
请教一个多线程设计的面试题# JobHunting - 待字闺中
w*e
1
设计一个支持concurrency的BST,该BST是类似于AVL和RBT的balanced,也就是说有些
操作会rotation。
请问谁有大概的思路?
avatar
m*n
2
critical section + AVL tree rotation.
avatar
w*e
3
details?怎么在tree里加入lock,lock怎么工作,然后改进improve concurrency,等
等。

【在 m*******n 的大作中提到】
: critical section + AVL tree rotation.
avatar
s*u
4
都这难度了啊。。。。
avatar
p*3
5

这个如果只是一般的插入和删除还好做,如果要rotate有可能一直rotate到root啊,整
个结构都可能改变。觉得rotate的话是肯定要锁住整个树,两个插入或删除不能同时发
生。如果读的话是不是可以用cpu支持的check and swap. 如果在确定iterate的子节点
发生变化的时候就retry,retry超过一定次数就lock整个树,就是在rotate的的时候刚
好正在travel那个rotate的节点的时候才可能miss一个数

【在 w*******e 的大作中提到】
: 设计一个支持concurrency的BST,该BST是类似于AVL和RBT的balanced,也就是说有些
: 操作会rotation。
: 请问谁有大概的思路?

avatar
p*2
6

这题是大牛研习的EPI里的吧?

【在 p*****3 的大作中提到】
:
: 这个如果只是一般的插入和删除还好做,如果要rotate有可能一直rotate到root啊,整
: 个结构都可能改变。觉得rotate的话是肯定要锁住整个树,两个插入或删除不能同时发
: 生。如果读的话是不是可以用cpu支持的check and swap. 如果在确定iterate的子节点
: 发生变化的时候就retry,retry超过一定次数就lock整个树,就是在rotate的的时候刚
: 好正在travel那个rotate的节点的时候才可能miss一个数

avatar
z*q
8
用基本的读写锁思路行么? 不一定是最优的,但应付面试够了吧
avatar
z*e
9
就是用基本的读写锁
但是不会把整个bst对象给锁住
会把节点锁住,当然这里bst都是自己去实现
所以锁node就好了

【在 z**q 的大作中提到】
: 用基本的读写锁思路行么? 不一定是最优的,但应付面试够了吧
avatar
f*4
10
锁node的话,树一大,并发一上去就别跑了 -_-
struct Node
{
Node *left, *right;
share_pointer data;
};
atomic root;
查找的时候,把当前root和data一块返回,对data的操作需要比较返回的
root和当前的atomic root;发现不一样,重新从atomic root查找。
新增或者删除的时候,每次都新建一个root,新树可以复用旧树未修改节点,更新
atomic root,旧树的未被新树使用的节点可以delay到下一次新增删除的时候删除。注
意退出的时候也需要清除这些节点。
avatar
x*w
11

要旋转的,怎么证明单锁node不会再两个或n个旋转同时发生的时候还consistent

【在 z****e 的大作中提到】
: 就是用基本的读写锁
: 但是不会把整个bst对象给锁住
: 会把节点锁住,当然这里bst都是自己去实现
: 所以锁node就好了

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。