提交 e29b7746 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

use std::atomic, though with operator->() for now, since that can only be…

use std::atomic, though with operator->() for now, since that can only be overriden with a member function
上级 0d38d840
......@@ -13,17 +13,3 @@
#define _GLIBCXX_ATOMIC_BUILTINS_8 1
#include "atomic_std.h"
template<class T>
struct atomic : public std::__atomic2::__atomic_base<T> {
atomic() = default;
~atomic() = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(T v) : std::__atomic2::__atomic_base<T>(v) {}
using std::__atomic2::__atomic_base<T>::operator T;
using std::__atomic2::__atomic_base<T>::operator=;
};
......@@ -464,14 +464,6 @@ namespace __atomic2
{ return load(); }
__pointer_type
operator->() const
{ return load(); }
__pointer_type
operator->() const volatile
{ return load(); }
__pointer_type
operator=(__pointer_type __p)
{
store(__p);
......@@ -650,22 +642,6 @@ namespace __atomic2
return __p1o == __p1n;
}
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m = memory_order_seq_cst)
{
return compare_exchange_strong(__p1, __p2, __m,
__calculate_memory_order(__m));
}
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m = memory_order_seq_cst) volatile
{
return compare_exchange_strong(__p1, __p2, __m,
__calculate_memory_order(__m));
}
__pointer_type
fetch_add(ptrdiff_t __d, memory_order __m = memory_order_seq_cst)
{ return __sync_fetch_and_add(&_M_p, __d); }
......
......@@ -246,6 +246,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __pointer_type(_M_b); }
__pointer_type
operator->() const
{ return __pointer_type(_M_b); }
__pointer_type
operator->() const volatile
{ return __pointer_type(_M_b); }
__pointer_type
operator=(__pointer_type __p)
{ return _M_b.operator=(__p); }
......
#include "gc.hh"
#include "atomic.hh"
using std::atomic;
struct buf : public rcu_freed {
atomic<int> flags;
u32 dev;
......
......@@ -2,6 +2,8 @@
#include "atomic.hh"
using std::atomic;
struct crange;
struct range : public rcu_freed {
......
......@@ -3,6 +3,8 @@
#include "gc.hh"
#include "atomic.hh"
using std::atomic;
// name spaces
// XXX maybe use open hash table, no chain, better cache locality
......
......@@ -3,6 +3,8 @@
#include "gc.hh"
#include "atomic.hh"
using std::atomic;
// A mapping of a chunk of an address space to
// a specific memory object.
enum vmatype { PRIVATE, COW};
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论