是否存在标准的mtx_t'无效'状态?

时间:2014-10-01 20:56:08

标签: c c11

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

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

1 个答案:

答案 0 :(得分:3)

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

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

此外,很容易为mtx_t添加足够的状态以使其成为可能。您必须添加

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