如果我有这样的方法:
def getValue()
{
lock.acquire();
int result = data[index];
lock.release();
return result;
}
Run Code Online (Sandbox Code Playgroud)
两个线程可以同时到达lock.acquire()。然后会发生什么?
其中一个首先获得锁,另一个必须等待,直到第一个释放锁。如果它们同时到达获取,则决定哪一个获得锁的机制在很大程度上依赖于硬件。
但我应该指出,不存在“完全相同的时间”这样的事情。要使不同线程中发生的两件事同时发生,就需要有某种全局的时间概念来对操作进行排序。哪有这回事。
此外,线程何时“到达”操作的概念也没有明确定义。操作不会立即发生,并且操作可能会与其他操作重叠。