因为在C中没有静态初始化,我想懒洋洋地初始化一个全局的mtx_t(请保持你的反应速度)。对我来说使用布尔标志并不是什么问题,但我宁愿只检查mtx_t变量。有没有标准的mtx_t'invalid'状态?
C11的mtx_t有一个幸运的'无效状态'我可以检查变量吗?我在草案标准中找不到任何东西。
因为在C中没有静态初始化,我想懒洋洋地初始化一个全局的mtx_t(请保持你的反应速度)。对我来说使用布尔标志并不是什么问题,但我宁愿只检查mtx_t变量。有没有标准的mtx_t'invalid'状态?
C11的mtx_t有一个幸运的'无效状态'我可以检查变量吗?我在草案标准中找不到任何东西。
不,没有可以检查的无效状态,使用未初始化的mtx_t
会导致未定义的行为。
对于mtx_t
而言,没有静态初始值设定项的整个事情有点愚蠢,在任何常规架构上都可以毫无问题地完成。 POSIX有它。
此外,很容易将足够的状态添加到mtx_t
以使其成为可能。你必须添加
volatile int
为你当初始化完成0
使用
atomic_flag
设置一个标志。在这种情况下,一旦你持有自旋锁
0
初始化mtx_t
和启动标志设置为一个atomic_flag
这是一个非常明确的描述,说明如何实现双重检查锁定 - volatile int标志有一个数据竞争。 – Casey 2014-10-02 06:24:15
我不认为有一个。 C11线程没有被广泛实现,文档也很差(在规范本身!)。所以如果你在规范中找不到任何东西,就是这样。 – 2014-10-01 21:34:07