gpt4 book ai didi

c++ - 我可以创建多少个 CRITICAL_SECTION?

转载 作者:可可西里 更新时间:2023-11-01 16:30:42 25 4
gpt4 key购买 nike

我可以初始化和使用的关键部分的数量是否有限制?

我的应用程序创建了许多(几千个)需要线程安全的对象。如果我在每个部分中都有一个关键部分,那会占用太多资源吗?

我认为因为我需要声明我自己的 CRITICAL_SECTION 对象,所以我不会像使用 Win32 Mutex 或 Event 那样浪费内核资源?但我只是有一个挥之不去的疑问...?

老实说,并不是所有这些对象都需要对我的应用程序来说是线程安全的,但关键部分位于库中的某个低级基类中,我确实需要一个几千个!

我可能有机会修改这个库,所以我想知道是否有任何方法可以延迟创建(然后从那时起使用)临界区,只有当我检测到对象正在从不同的线程使用到它是在哪一个创建的?或者这是 Windows 会为我做的吗?

最佳答案

您可以声明的 CRITICAL_SECTION 结构 的数量没有限制——它们只是最低级别的 POD 数据结构。您可以使用 InitializeCriticalSection()初始化的数量可能有一些限制。 .根据文档,它可能会在 Windows 2000/XP/Server 2003 上引发 STATUS_NO_MEMORY 异常,但显然它在 Vista 上肯定会成功。在您初始化它们之前,它们不会占用任何内核资源(如果它们占用任何资源的话)。

如果您发现正在引发 STATUS_NO_MEMORY 异常,您可以尝试只为给定对象初始化 CRITICAL_SECTION,前提是它有可能用于多个对象线程。如果您知道某个特定对象将仅与一个线程一起使用,请设置一个标志,然后跳过对 InitializeCriticalSection()EnterCriticalSection()LeaveCriticalSection 的所有调用()DeleteCriticalSection()

关于c++ - 我可以创建多少个 CRITICAL_SECTION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932823/

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