r*******g 发帖数: 1335 | 1 前几天电面一大公司,题目是bounded blocking queue,因为我准备过r/w lock的实现
,所以大概知道是mutex+CV,也就是传说中的monitor,但是我是用c++,所以不会java。
问题来了,写完了,貌似没什么问题,然后有一个问题,是要实现writemultiple(),
就是一次写入多个,如果没有空间写,需要等reader,而且wrtemultiple过程中不能被
其它writer打断,我因为本来对这个不熟,所以一下没反应过来。
但是印度面试官提醒我可以引入其它lock,所以我真的就上钩了,在这里卡壳了一会,
到最后也没写完整。
今天仔细复习了一下,现在想想,其实引入一个变量表明现在正在multiplewrite,不
就可以block writer了吗?而且丝毫不影响已有的reader逻辑。貌似不用引入新的CV。
幸好国人大哥似乎帮忙了,还可以继续二面。 |
b**********5 发帖数: 7881 | 2 如果就一个变量, 你怎么才能发现reader可以了, 现在有足够空间写了?
java。
【在 r*******g 的大作中提到】 : 前几天电面一大公司,题目是bounded blocking queue,因为我准备过r/w lock的实现 : ,所以大概知道是mutex+CV,也就是传说中的monitor,但是我是用c++,所以不会java。 : 问题来了,写完了,貌似没什么问题,然后有一个问题,是要实现writemultiple(), : 就是一次写入多个,如果没有空间写,需要等reader,而且wrtemultiple过程中不能被 : 其它writer打断,我因为本来对这个不熟,所以一下没反应过来。 : 但是印度面试官提醒我可以引入其它lock,所以我真的就上钩了,在这里卡壳了一会, : 到最后也没写完整。 : 今天仔细复习了一下,现在想想,其实引入一个变量表明现在正在multiplewrite,不 : 就可以block writer了吗?而且丝毫不影响已有的reader逻辑。貌似不用引入新的CV。 : 幸好国人大哥似乎帮忙了,还可以继续二面。
|
b**********5 发帖数: 7881 | 3 如果就一个变量, 你怎么才能发现reader可以了, 现在有足够空间写了?
如果就一个变量, 你怎么才能发现writemultiple finish了?
java。
【在 r*******g 的大作中提到】 : 前几天电面一大公司,题目是bounded blocking queue,因为我准备过r/w lock的实现 : ,所以大概知道是mutex+CV,也就是传说中的monitor,但是我是用c++,所以不会java。 : 问题来了,写完了,貌似没什么问题,然后有一个问题,是要实现writemultiple(), : 就是一次写入多个,如果没有空间写,需要等reader,而且wrtemultiple过程中不能被 : 其它writer打断,我因为本来对这个不熟,所以一下没反应过来。 : 但是印度面试官提醒我可以引入其它lock,所以我真的就上钩了,在这里卡壳了一会, : 到最后也没写完整。 : 今天仔细复习了一下,现在想想,其实引入一个变量表明现在正在multiplewrite,不 : 就可以block writer了吗?而且丝毫不影响已有的reader逻辑。貌似不用引入新的CV。 : 幸好国人大哥似乎帮忙了,还可以继续二面。
|
r*******g 发帖数: 1335 | 4 这一个变量表示现在有multiplewriter存在
multiplewriter里面,每次尽量写所有的,如果写不完,那么就read_CV.signal()
multiplewriter(int no_of_item){
mutex.lock()
while(没有空间写)
pthread_cond_wait(write_CV, mutex);
bool_now_multiple_writer = true;
int written = 0;
while(written
判断可以写多少
写入n
written+=n;
read_CV.signal(); //让reader继续写。
while(没有空间写)
pthread_cond_wait(write_CV, mutex);
}
bool_now_multiple_writer = false;
mutex.unlock();
}
singlewriter(){
逻辑不变,只是多一个判断bool_now_multiple_writer==false才继续。
}
这样行不?求建议。
【在 b**********5 的大作中提到】 : 如果就一个变量, 你怎么才能发现reader可以了, 现在有足够空间写了? : 如果就一个变量, 你怎么才能发现writemultiple finish了? : : java。
|
e***a 发帖数: 1661 | 5 it's important that ur solution should match the interviewer's thought
even though ur solution is excellent. |
b*****n 发帖数: 618 | 6 唉,人家并没有说错,只需要加另一个write lock来保证不同的write操作是mutual
excluded就可以了,灰常简单的做法。
你这么写还需要稍微修改一下,现在还不能保证不同multiwrite之间不能被打断的。 |
r*******g 发帖数: 1335 | 7 如果是多个multiplewriter,似乎也可以,我稍微改了下
multiplewriter(int no_of_item){
mutex.lock()
while(没有空间写 && bool_now_multiple_writer==false)
pthread_cond_wait(write_CV, mutex);
bool_now_multiple_writer = true;
int written = 0;
while(written
判断可以写多少
写入n
written+=n;
read_CV.signal(); //让reader继续写。
while(没有空间写) //这里就不能等待bool_now_multiple_writer==false了。
pthread_cond_wait(write_CV, mutex);
}
bool_now_multiple_writer = false;
mutex.unlock();
}
singlewrite(){
mutex.lock();
while (没有空间写 && bool_now_multiple_writer==false)
pthread_cond_wait(write_CV, mutex);
写一个entry
read_CV.signal(); //让reader继续写。
mutex.unlock();
}
read(){
mutex.lock();
while (没有entry读)
pthread_cond_wait(read_CV, mutex);
读一个entry
write_CV.signal(); //让writer继续写
mutex.unlock();
}
【在 b*****n 的大作中提到】 : 唉,人家并没有说错,只需要加另一个write lock来保证不同的write操作是mutual : excluded就可以了,灰常简单的做法。 : 你这么写还需要稍微修改一下,现在还不能保证不同multiwrite之间不能被打断的。
|
i******w 发帖数: 214 | 8 看来是L
java。
【在 r*******g 的大作中提到】 : 前几天电面一大公司,题目是bounded blocking queue,因为我准备过r/w lock的实现 : ,所以大概知道是mutex+CV,也就是传说中的monitor,但是我是用c++,所以不会java。 : 问题来了,写完了,貌似没什么问题,然后有一个问题,是要实现writemultiple(), : 就是一次写入多个,如果没有空间写,需要等reader,而且wrtemultiple过程中不能被 : 其它writer打断,我因为本来对这个不熟,所以一下没反应过来。 : 但是印度面试官提醒我可以引入其它lock,所以我真的就上钩了,在这里卡壳了一会, : 到最后也没写完整。 : 今天仔细复习了一下,现在想想,其实引入一个变量表明现在正在multiplewrite,不 : 就可以block writer了吗?而且丝毫不影响已有的reader逻辑。貌似不用引入新的CV。 : 幸好国人大哥似乎帮忙了,还可以继续二面。
|
b******d 发帖数: 794 | 9 记住老印面试官肯定不会提示你,只会逼问你,或者故意误导你,别的老白,老中一般
都乐意给你点提示,老印就是找机会给你使绊子下黑手。
java。
【在 r*******g 的大作中提到】 : 前几天电面一大公司,题目是bounded blocking queue,因为我准备过r/w lock的实现 : ,所以大概知道是mutex+CV,也就是传说中的monitor,但是我是用c++,所以不会java。 : 问题来了,写完了,貌似没什么问题,然后有一个问题,是要实现writemultiple(), : 就是一次写入多个,如果没有空间写,需要等reader,而且wrtemultiple过程中不能被 : 其它writer打断,我因为本来对这个不熟,所以一下没反应过来。 : 但是印度面试官提醒我可以引入其它lock,所以我真的就上钩了,在这里卡壳了一会, : 到最后也没写完整。 : 今天仔细复习了一下,现在想想,其实引入一个变量表明现在正在multiplewrite,不 : 就可以block writer了吗?而且丝毫不影响已有的reader逻辑。貌似不用引入新的CV。 : 幸好国人大哥似乎帮忙了,还可以继续二面。
|