c++ - std::mutex 的 constexpr 构造函数是如何实现的?
问题描述
在查看 C++ Reference forstd::mutex
时,我注意到 for 的构造函数std::mutex
被标记为constexpr
。
起初这令人惊讶,因为我们通常必须进行系统调用(pthread_mutex_init()
(POSIX)或CreateMutex()
(Windows))来初始化互斥锁。然而,仔细观察,对于 POSIX,可以使用常量PTHREAD_MUTEX_INITIALIZER
来静态初始化互斥锁(可能作为全局变量),尽管我找不到 Windows 的等价物。
然而,即使 POSIX 的这种静态初始化是constexpr
构造函数背后的原因,实现仍然存在各种未解决的问题:
- 在 Windows(可能还有其他非 POSIX 系统)上,可能没有静态初始化互斥锁的方法。
- 在添加C++20 之前,根据是否在编译时调用构造函数,不可能有不同的代码路径
std::is_constant_evaluated()
,因此我们无法确定是否PTHREAD_MUTEX_INITIALIZER
或pthread_mutex_init()
应该使用。
那么,如何实现constexpr
构造函数std::mutex
呢?
解决方案
推荐阅读
- java - 为什么 SynchronizedList get 方法需要用 java 中的同步包装
- javascript - 使用 React-Audio-Player 在鼠标移动时自动播放音频文件
- apache-kafka - 安装在单台 PC 上时如何提高 Kafka(生产者和消费者)的性能
- google-bigquery - 将时间戳转换为特定时区然后在 bigquery 中将其转换为日期时出现问题
- node.js - 用nodejs上传图片
- autohotkey - Autohotkey:WinMenuSelectItem 在 Figma 上不起作用
- reactjs - 在 reactjs 中用 amCharts4 开玩笑
- c# - 更改连接字符串而不保存 app.config
- javascript - 将带有标记、弹出窗口和 GeoJSON 线的地图(图块)形成为用于打印 A0 纸的高分辨率文件(图像、pdf 文件)
- python - WinError 1326 用户名或密码不正确