由买买提看人间百态

topics

全部话题 - 话题: shelfstock
(共0页)
p****2
发帖数: 387
1
来自主题: JobHunting版 - 微软面试题
问题: 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();
p****2
发帖数: 387
2
来自主题: JobHunting版 - 微软面试题
你说的这种感情况在原code里会出现,在新code里似乎出现不了。
还有,shelfStock函数里有如下错误:
if (shelf.Count == 1) \\ <-- should be "== 0"
Thread.Sleep(shelfClearThread);
k***g
发帖数: 75
3
来自主题: JobHunting版 - 微软面试题
你的修改明显是错的,原来的睡眠唤醒顺序是正确的
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了。
(共0页)