gpt4 book ai didi

multithreading - 为什么每次与互斥锁同步时都会发生线程上下文切换?

转载 作者:行者123 更新时间:2023-12-03 22:53:36 26 4
gpt4 key购买 nike

我有多个线程在紧密循环中更新单个数组。 (双核处理器上有 10 个线程 @ 大约每秒 100000 次更新)。每次数组在互斥锁 (WaitForSingleObject/ReleaseMutex) 的保护下更新。我注意到没有线程对数组进行两次连续更新,这意味着必须有某种与同步相关的 yield 。这意味着每秒大约发生 100000 次上下文切换,这似乎不是最佳选择。为什么会这样?

最佳答案

这里的问题是所有等待线程都有一个顺序。

在 WaitForSingleObject 中阻塞的每个线程都进入一个队列,然后被调度程序挂起,这样它就不会再占用执行时间。释放互斥锁后,调度程序将恢复等待线程之一。未指定线程从队列中唤醒的确切顺序,但在许多情况下,它将是简单的先进先出。

现在发生的情况是,如果同一个线程释放互斥体,然后在同一个互斥体上执行另一个 WaitForSingleObject,他将被重新插入到队列中,而且他被插入到队列的前面的可能性很小如果已经有其他线程在等待,则队列。这是有道理的,因为允许他跳到队列的前面可能会导致其他线程挨饿。所以调度器可能只是挂起他并唤醒队列前面的线程。

关于multithreading - 为什么每次与互斥锁同步时都会发生线程上下文切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105681/

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