多个线程可以获取同一个锁吗?

mas*_*ker 4 multithreading

如果我有这样的方法:

def getValue()
{
    lock.acquire();
    int result = data[index];
    lock.release();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

两个线程可以同时到达lock.acquire()。然后会发生什么?

Dav*_*rtz 7

其中一个首先获得锁,另一个必须等​​待,直到第一个释放锁。如果它们同时到达获取,则决定哪一个获得锁的机制在很大程度上依赖于硬件。

但我应该指出,不存在“完全相同的时间”这样的事情。要使不同线程中发生的两件事同时发生,就需要有某种全局的时间概念来对操作进行排序。哪有这回事。

此外,线程何时“到达”操作的概念也没有明确定义。操作不会立即发生,并且操作可能会与其他操作重叠。