由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 微软面试题
相关主题
怎么样避免deadlock?问一道F家的考古题
常见编程面试题答案的2种格式,哪种最好?请教一道面试题
急求大神指导一道面经微软面试题
careercup 150 deadlock 一题[合集] OS interview questions
Integer Partition problem[合集] Google interview question
请教个问题,这个程序错在哪里?Amazon电面 (05/02/09更新第二次,第三次电面)
careerup 150 上一道deadlock 题今天一个trading firm的面试题
break deadlock in a live process without killing the process面试题
相关话题的讨论汇总
话题: bookshelf话题: shelf话题: book话题: shelfstock话题: void
进入JobHunting版参与讨论
1 (共1页)
p****2
发帖数: 387
1
问题: What is wrong with the following code?
public void shelfStock(BookShelf shelf)
{
while (true)
{
Book book = GetBookForShelf();
if (shelf.Count == shelf.Capacity - 1)
Thread.Sleep(shelfStockThread);
shelf.Add(book);
shelf.Count++;
if (shelf.Count == 1)
Thread.WakeUp(shelfClearThread);
}
}
public void shelfClear(BookShelf shelf)
{
while (true)
{
if (shelf.Count == 0)
sleep();
k***g
发帖数: 75
2
shelf.Count需要锁保护吧,这里显然是两个进程在操作shelf,一个往上放,一个往下
拿。

【在 p****2 的大作中提到】
: 问题: What is wrong with the following code?
: public void shelfStock(BookShelf shelf)
: {
: while (true)
: {
: Book book = GetBookForShelf();
: if (shelf.Count == shelf.Capacity - 1)
: Thread.Sleep(shelfStockThread);
: shelf.Add(book);
: shelf.Count++;

b**f
发帖数: 20
3
when shelf.Count reaches shelf.Capacity - 1, shelf stock will sleep forever.
p****2
发帖数: 387
4
我也提到过,interviewer回答即便这样也是错的。

【在 k***g 的大作中提到】
: shelf.Count需要锁保护吧,这里显然是两个进程在操作shelf,一个往上放,一个往下
: 拿。

p****2
发帖数: 387
5
你是说我的code?

forever.

【在 b**f 的大作中提到】
: when shelf.Count reaches shelf.Capacity - 1, shelf stock will sleep forever.
k***g
发帖数: 75
6
我觉得基本上要建立起一个critical section,基本上保证add和count的增加都不会受
到干扰。但是还要考虑会不会出现两个线程同时都进入睡眠的情况,有另一个线程的代
码吗?

【在 p****2 的大作中提到】
: 我也提到过,interviewer回答即便这样也是错的。
k***g
发帖数: 75
7
比如说如果capacity只有1,架子上只能临时放一本书,是不是两个线程都会睡?

【在 k***g 的大作中提到】
: 我觉得基本上要建立起一个critical section,基本上保证add和count的增加都不会受
: 到干扰。但是还要考虑会不会出现两个线程同时都进入睡眠的情况,有另一个线程的代
: 码吗?

p****2
发帖数: 387
8
这两个函数分别在两个不同的thread里。

【在 k***g 的大作中提到】
: 我觉得基本上要建立起一个critical section,基本上保证add和count的增加都不会受
: 到干扰。但是还要考虑会不会出现两个线程同时都进入睡眠的情况,有另一个线程的代
: 码吗?

p****2
发帖数: 387
9
你说的这种感情况在原code里会出现,在新code里似乎出现不了。
还有,shelfStock函数里有如下错误:
if (shelf.Count == 1) \\ <-- should be "== 0"
Thread.Sleep(shelfClearThread);

【在 k***g 的大作中提到】
: 比如说如果capacity只有1,架子上只能临时放一本书,是不是两个线程都会睡?
c*******d
发帖数: 255
10
我觉得原code逻辑比较混乱

上面应该是"== shelf.Capacity"
我觉得上面应该是 "== shelf.Capacity"
我觉得上面应该是 "== 0"

【在 p****2 的大作中提到】
: 问题: What is wrong with the following code?
: public void shelfStock(BookShelf shelf)
: {
: while (true)
: {
: Book book = GetBookForShelf();
: if (shelf.Count == shelf.Capacity - 1)
: Thread.Sleep(shelfStockThread);
: shelf.Add(book);
: shelf.Count++;

相关主题
请教个问题,这个程序错在哪里?问一道F家的考古题
careerup 150 上一道deadlock 题请教一道面试题
break deadlock in a live process without killing the process微软面试题
进入JobHunting版参与讨论
k***g
发帖数: 75
11
我没看见你改的部分,刚看到,我觉得好像是改错了,为啥要改那个睡和唤醒的顺序?

【在 p****2 的大作中提到】
: 你说的这种感情况在原code里会出现,在新code里似乎出现不了。
: 还有,shelfStock函数里有如下错误:
: if (shelf.Count == 1) \\ <-- should be "== 0"
: Thread.Sleep(shelfClearThread);

k***g
发帖数: 75
12
你的修改明显是错的,原来的睡眠唤醒顺序是正确的
public void shelfClear(BookShelf shelf)
{
while (true)
{
if (shelf.Count == 0)
Thread.WakeUp(shelfStockThread);
lock(shelf) {
shelf.RomoveBook(shelf.GetBook());
shelf.Count--;
}
看这儿修改过的代码,如果Count是0,唤醒shelfStock(这个线程未必睡眠),然后就
锁定书架取书,将Count减一,Count就是-1了。

【在 p****2 的大作中提到】
: 你说的这种感情况在原code里会出现,在新code里似乎出现不了。
: 还有,shelfStock函数里有如下错误:
: if (shelf.Count == 1) \\ <-- should be "== 0"
: Thread.Sleep(shelfClearThread);

p****2
发帖数: 387
13
就是说原代码是对的了。

【在 k***g 的大作中提到】
: 你的修改明显是错的,原来的睡眠唤醒顺序是正确的
: public void shelfClear(BookShelf shelf)
: {
: while (true)
: {
: if (shelf.Count == 0)
: Thread.WakeUp(shelfStockThread);
: lock(shelf) {
: shelf.RomoveBook(shelf.GetBook());
: shelf.Count--;

s********f
发帖数: 510
14
源代码也不对。

【在 p****2 的大作中提到】
: 就是说原代码是对的了。
p****2
发帖数: 387
15
http://en.wikipedia.org/wiki/Producer-consumer_problem

【在 s********f 的大作中提到】
: 源代码也不对。
s********f
发帖数: 510
16
你给的link也说了阿,会造成deadlock

【在 p****2 的大作中提到】
: http://en.wikipedia.org/wiki/Producer-consumer_problem
1 (共1页)
进入JobHunting版参与讨论
相关主题
面试题Integer Partition problem
求助:非cs ms onsite 怎么准备请教个问题,这个程序错在哪里?
我也来报个amazon phone interview的面经吧careerup 150 上一道deadlock 题
amazon 电面面经break deadlock in a live process without killing the process
怎么样避免deadlock?问一道F家的考古题
常见编程面试题答案的2种格式,哪种最好?请教一道面试题
急求大神指导一道面经微软面试题
careercup 150 deadlock 一题[合集] OS interview questions
相关话题的讨论汇总
话题: bookshelf话题: shelf话题: book话题: shelfstock话题: void