gpt4 book ai didi

.net - 当两个线程试图同时锁定同一个资源时会发生什么?

转载 作者:行者123 更新时间:2023-12-03 20:45:07 25 4
gpt4 key购买 nike

当两个线程试图在完全相同的微秒(或 CPU 切片或指令可以测量的最小时间长度)锁定同一个对象时会发生什么?

两个线程是否有可能在完全相同的并发时间执行指令,或者这在今天的硬件中是不可能的?

我正在处理一个处理多线程的项目,可以这么说,任何线程都可以在终点线上击败另一个线程。所以很自然地,“当他们同时锁定时会发生什么?”的问题。必须解决 IMO。

最佳答案

这是不可能的,锁不能做他们 promise 的事情。这需要处理器支持,因为它是唯一可以确保多个内核不会尝试同时访问同一内存位置的内核。一个例子是这段汇编代码,由 x86 版本的 CLR 在其 Monitor.TryEnter() 方法中使用:

FASTCALL_FUNC CompareExchangeUP,12
_ASSERT_ALIGNED_4_X86 ecx
mov eax, [esp+4] ; Comparand
cmpxchg [ecx], edx
retn 4 ; result in EAX
FASTCALL_ENDFUNC CompareExchangeUP
cmpxchg处理器指令提供原子性保证。这是任何现代内核都具有的那种指令,它的通用名称是“比较和交换”。您将在此 Wikipedia article 中找到有关此说明的更多信息.

关于.net - 当两个线程试图同时锁定同一个资源时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com