首页 > 解决方案 > std::mutex 的 constexpr 构造函数是如何实现的?

问题描述

在查看 C++ Reference forstd::mutex时,我注意到 for 的构造函数std::mutex被标记为constexpr

起初这令人惊讶,因为我们通常必须进行系统调用(pthread_mutex_init()(POSIX)或CreateMutex()(Windows))来初始化互斥锁。然而,仔细观察,对于 POSIX,可以使用常量PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁(可能作为全局变量),尽管我找不到 Windows 的等价物。

然而,即使 POSIX 的这种静态初始化是constexpr构造函数背后的原因,实现仍然存在各种未解决的问题:

  1. 在 Windows(可能还有其他非 POSIX 系统)上,可能没有静态初始化互斥锁的方法。
  2. 在添加C++20 之前,根据是否在编译时调用构造函数,不可能有不同的代码路径std::is_constant_evaluated(),因此我们无法确定是否PTHREAD_MUTEX_INITIALIZERpthread_mutex_init()应该使用。

那么,如何实现constexpr构造函数std::mutex呢?

标签: c++c++11constructormutexconstexpr

解决方案


推荐阅读