0

假设我们有下一个示例代码:

while(some condition){
    lock1.lock();
    .
    .
}

问题是:

假设对于在此代码部分上运行的某个线程正在退出 while 循环的条件并且 lock1 可用,那么线程是否有可能检查循环的条件但仍然不会获得锁?

还是在这种情况下保证如果检查条件,线程将获得锁?

4

2 回答 2

1

简而言之:是的,这是可能的。

如果另一个线程已经获得了锁,那么你的线程将被迫等待它变得空闲。

请记住,您无法知道两个或多个同时执行的线程如何交错它们的指令执行。假设两个线程 A 和 B 执行此代码。如果线程 A 发现条件为真,则它可能在实际获取锁之前(即在评估 while 条件和调用lock()条件为真,获取锁,线程 A 等待。

于 2012-02-04T18:30:21.073 回答
0

你不应该将你的锁建立在其他线程可以修改的条件上,这样的条件可能会影响锁内的代码。无法保证在您获得锁之前条件不会改变。

于 2012-02-04T18:30:24.893 回答