我想在std::atomic_int
linux函数中使用futex
。
但是,futex
函数需要一个地址位置,而且我不确定仅仅使用atomic_int
对象的地址的正确性。
因此,我想知道是否有可能获得atomic_int
的基础存储地址,因此我可以将其传递给futex
来电。
答案 0 :(得分:1)
Portly,没有。实际上,在任何现代C ++实现中,atomic_int
可能只是sizeof(int)
个字节的内存,就像常规int
一样。如果是sizeof(std::atomic<int>) == sizeof(int)
,请选择已损坏并将其地址传递给futex
,看看会发生什么。
答案 1 :(得分:1)
也许不是。
在手册中
int futex(int *uaddr, int op, int val, const struct timespec *timeout,
int *uaddr2, int val3);
The uaddr argument needs to point to an aligned integer which stores the counter. The operation to execute is passed via the op argument, along with a value val.
您的atomic_int
应该对齐。
在gcc 4.7.2(在Fedora 18上),文件:/usr/include/c++/4.7.2/bits/atomic_base.h
// Base types for atomics.
template<typename _IntTp>
struct __atomic_base;
...
/// atomic_int
typedef __atomic_base<int> atomic_int;
...
template<typename _ITp>
struct __atomic_base
{
private:
typedef _ITp __int_type;
__int_type _M_i;
// some operations
...
atomic_int
只是数据__int_type _M_i;
的包装,其中__int_type
是您传入的模板参数。所以它是一个整数。并且结构不能保证在跨平台中对齐。