summaryrefslogtreecommitdiffstats
path: root/raul/Maid.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2013-01-11 03:35:17 +0000
committerDavid Robillard <d@drobilla.net>2013-01-11 03:35:17 +0000
commitf8aa3ee7621758b35ba52a5b17972fa4144710ae (patch)
tree2bf934c558b5c97f858be03101fa1544ecf6835d /raul/Maid.hpp
parent77d36f84343baa0864e742834be15c0296dc4389 (diff)
downloadraul-f8aa3ee7621758b35ba52a5b17972fa4144710ae.tar.gz
raul-f8aa3ee7621758b35ba52a5b17972fa4144710ae.tar.bz2
raul-f8aa3ee7621758b35ba52a5b17972fa4144710ae.zip
Use C++11 atomics.
git-svn-id: http://svn.drobilla.net/lad/trunk/raul@4916 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'raul/Maid.hpp')
-rw-r--r--raul/Maid.hpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/raul/Maid.hpp b/raul/Maid.hpp
index f7870ec..337d7f9 100644
--- a/raul/Maid.hpp
+++ b/raul/Maid.hpp
@@ -17,7 +17,8 @@
#ifndef RAUL_MAID_HPP
#define RAUL_MAID_HPP
-#include "raul/AtomicPtr.hpp"
+#include <atomic>
+
#include "raul/Disposable.hpp"
#include "raul/Manageable.hpp"
#include "raul/Noncopyable.hpp"
@@ -50,8 +51,8 @@ public:
inline void dispose(Disposable* obj) {
if (obj) {
while (true) {
- obj->_maid_next = _disposed.get();
- if (_disposed.compare_and_exchange(obj->_maid_next, obj)) {
+ obj->_maid_next = _disposed.load();
+ if (_disposed.compare_exchange_strong(obj->_maid_next, obj)) {
return;
}
}
@@ -83,14 +84,14 @@ public:
// Atomically get the head of the disposed list
Disposable* disposed;
while (true) {
- disposed = _disposed.get();
- if (_disposed.compare_and_exchange(disposed, NULL)) {
+ disposed = _disposed.load();
+ if (_disposed.compare_exchange_strong(disposed, NULL)) {
break;
}
}
// Free the disposed list
- for (Disposable* obj = _disposed.get(); obj;) {
+ for (Disposable* obj = _disposed.load(); obj;) {
Disposable* const next = obj->_maid_next;
delete obj;
obj = next;
@@ -107,8 +108,8 @@ public:
}
private:
- AtomicPtr<Disposable> _disposed;
- SharedPtr<Manageable> _managed;
+ std::atomic<Disposable*> _disposed;
+ SharedPtr<Manageable> _managed;
};
} // namespace Raul