gpt4 book ai didi

c# - 哪个线程最先进入临界区?

转载 作者:太空狗 更新时间:2023-10-29 21:13:40 24 4
gpt4 key购买 nike

假设多个线程周期性地执行下面的DoWork()方法。假设在某个时刻,两个线程几乎同时开始执行此方法,因此两个本地时间戳对象中的一个比另一个大一个刻度。

ICollection collection = // ...

public void DoWork()
{
DateTime timestamp = DateTime.Now;

lock(collection.SyncRoot)
{
// critical section
}
}

如果线程 A 的特征时间戳等于 t1,而线程 B 的特征时间戳 t2 等于 t1 + 1 tick,那么线程 A 将首先需要访问临界区。

.NET 如何管理多线程对临界区的访问?它是否将访问请求放入队列中,以便它们按时间顺序排列?也就是说,是否按照线程访问请求的顺序来保证访问临界区?

最佳答案

绝对不能保证线程执行的顺序以及哪个线程首先获得临界区。

请注意,即使线程的优先级也不能保证顺序 - 不同的内核/CPU 可以同时执行不同优先级的线程,并且任何线程都可以首先到达并获得临界区。

注2:线程也可以被安排在任意时刻执行/等待,所以同一个线程中的2个不同操作彼此相邻并不意味着它们会一个接一个地执行而不会延迟之间。在您的情况下,这意味着线程 A 可能会在获得时间戳后立即停止,而计划在一段时间后执行的线程 B 将很容易获得稍后的时间戳,但首先到达关键部分。

关于c# - 哪个线程最先进入临界区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286628/

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