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了。 |
|