因为在C中没有静态初始化,我想懒洋洋地初始化一个全局mtx_t(请保持你的呕吐反射)。使用布尔标志和诸如此类的东西对我来说不是问题,但我宁愿只检查mtx_t变量。
C11的mtx_t是否有一个幸福的“无效状态”我可以检查变量吗?我在标准草案中找不到任何内容。
答案 0 :(得分:3)
不存在您可以检查的无效状态,使用未初始化的mtx_t
导致未定义的行为。
mtx_t
没有静态初始化器的整个事情有点愚蠢,在任何普通的架构上你都可以毫无问题地做到这一点。 POSIX有它。
此外,很容易为mtx_t
添加足够的状态以使其成为可能。您必须添加
volatile int
作为在初始化完成时设置为1的标志atomic_flag
,如果第一个标志为0
,则用作自旋锁。在那种情况下,一旦你握住螺旋锁
0
初始化mtx_t
并将init标志设置为一个atomic_flag