如何做“is_atomically_assignable”之类的事情?

时间:2014-06-17 21:47:17

标签: c++ c++11 x86 x86-64 atomic

当然,std中没有这样的东西,但我需要相同的功能。

我有一个在T类型上模板化的无锁数据结构,其中T由用户提供,我需要静态断言的是T是在x86或x86-64上可自动分配的类型(包括所有内置的积分常量和浮点类型,以及它的任何typedef,但我认为不一定限于那些)。我猜测只是检查类型是否可以分配,并且其sizeof是< = 8是不够的。最好的方法是什么?强制T为std :: atomic<>然后检查is_lock_free()是不可能的。

1 个答案:

答案 0 :(得分:2)

"原子可分配"使用类型来实现无锁数据结构是不够的,所以这个想法从一开始就走向错误的路径。

使用std::atomic(和朋友)是C ++中实现无锁数据结构所必需的原子性和排序保证的唯一方法。如果没有其他线程可以看到它,原子分配就没用了。