gpt4 book ai didi

c - 有标准的 mtx_t 'invalid' 状态吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:04 25 4
gpt4 key购买 nike

因为 C 中没有静态初始化,我想懒惰地初始化一个全局 mtx_t(请保持你的呕吐反射)。使用 bool 标志和诸如此类的东西对我来说不是问题,但我宁愿只检查 mtx_t 变量。

是否有 C11 的 mtx_t 的“无效状态”我可以检查变量?我在标准草案中找不到任何内容。

最佳答案

不存在您可以检查的无效状态,使用未初始化的 mtx_t 会导致未定义的行为。

mtx_t 没有静态初始值设定项的整个事情有点愚蠢,在任何普通架构上你都可以毫无问题地做到这一点。 POSIX 有它。

此外,很容易将足够的状态添加到 mtx_t 以实现这一点。你必须添加

  • 一个volatile int作为你在初始化完成时设置为1的标志
  • 一个 atomic_flag 用作自旋锁,以防第一个标志为 0。在那种情况下,一旦你持有自旋锁
    • 再次测试初始化​​标志
    • 如果它仍然是0,则初始化mtx_t并将init标志设置为1
    • 取消设置atomic_flag

关于c - 有标准的 mtx_t 'invalid' 状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150509/

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