c++ - 实现同步原语的原子的较小类型,例如信号量、互斥体或屏障
问题描述
同步原语可以std::atomic<T>
至少使用它们的用户空间部分来实现。使用 C++20 std::atomic<T>::wait
,它们只能基于原子。
问题是是否值得使用指针大小的类型或更小的类型。
C++20std::semaphore
是一个将最大值作为模板参数传递的示例,因此可以在编译时进行选择,而不是硬编码。
到目前为止我的想法:
我认为在futex
使用特定可变大小的平台上,应该只使用该大小。在灵活WaitOnAdress
的 Windows 上,有一个空间可供选择。
x64 上的 32 位类型导致更小的编码和相同的效率,所以可能是要走的路。进一步减少到 16 位和 8 位类型显然没有用(16 位类型导致比 32 位类型更大的编码)。
还有一个 Windows on arm 的案例,我不确定。
对于std::semaphore
,基于最大值选择整数类型的能力是专门化二进制信号量的副作用,而不是意图。
解决方案
推荐阅读
- javascript - 如何使用 pubnub 允许用户创建群聊
- python - 接收图像帧并将数据转换为图像文件并使用烧瓶将其保存在文件夹中
- arrays - Ada 中堆栈分配数组的访问类型
- instagram - 如何在 Spark AR 中为所有设备设置相同的 2D 文本位置
- kubernetes - Kubernetes 仪表板无法访问
- java - 无法在 Android Studio 中使用 CoordinatorLayout
- sql - 如何生成包含今天日期的表名?
- classification - 在 pytorch 中使用 4 通道图像进行分类
- python - Git-bash 使用错误版本的 Python
- testing - 同时安装测试和生产前景插件