gpt4 book ai didi

c++ - 等待全局锁的多个线程在第一次获得锁后都应该返回 true

转载 作者:行者123 更新时间:2023-11-30 04:35:16 39 4
gpt4 key购买 nike

类似的问题是这个:Are threads waiting on a lock FIFO?然而,在这个问题中,一旦获得锁,只有一个线程执行 protected 代码,最终所有线程都执行了该代码。

我想做的是执行一次 protected 代码,但对于当时排队等待方法调用的所有线程,返回 true。

基本上, protected 代码是一个全局检查点,它与当时等待的所有线程相关。即,连续执行 N 个检查点不会超过 1 个。

请注意,当检查点完成时,还会有对该方法的其他调用,这些调用本身需要一个新的检查点调用。

我相信我想做的是对全局函数的“批量”同步调用。

我怎样才能在 C++ 中实现这一点,或许可以使用 Boost?

最佳答案

您似乎在寻找 try_lock()

给定一些 Boost.Thread Lockable,调用 Lockable::try_lock() 将返回 true,如果它在那一刻可以获得锁,否则返回 false无法获取锁。

当您的线程到达检查点时,让它尝试获取此锁。如果失败,另一个线程已经在函数中。如果成功,检查一些 bool 以查看检查点是否已经运行。如果已经运行,则释放锁并继续。如果还没有运行,则保持锁并运行检查点功能,并将检查点bool设置为true。

关于c++ - 等待全局锁的多个线程在第一次获得锁后都应该返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474473/

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