138 lines
2.8 KiB
Diff
138 lines
2.8 KiB
Diff
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||
|
index 2c8880a..af0d174 100644
|
||
|
--- a/CMakeLists.txt
|
||
|
+++ b/CMakeLists.txt
|
||
|
@@ -21,7 +21,7 @@ set(CXX_FLAGS
|
||
|
-Wpointer-arith
|
||
|
-Wshadow
|
||
|
-Wwrite-strings
|
||
|
- -march=native
|
||
|
+ -march=armv4
|
||
|
# -MMD
|
||
|
# -std=c++0x
|
||
|
-rdynamic
|
||
|
@@ -31,7 +31,7 @@ if(CMAKE_BUILD_BITS EQUAL 32)
|
||
|
endif()
|
||
|
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CXX_FLAGS}")
|
||
|
|
||
|
-set(CMAKE_CXX_COMPILER "g++")
|
||
|
+set(CMAKE_CXX_COMPILER "arm-g++")
|
||
|
#set(CMAKE_CXX_COMPILER "icpc")
|
||
|
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
|
||
|
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -finline-limit=1000 -DNDEBUG")
|
||
|
diff --git a/muduo/base/Atomic.h b/muduo/base/Atomic.h
|
||
|
index 3478da0..cc1dd45 100644
|
||
|
--- a/muduo/base/Atomic.h
|
||
|
+++ b/muduo/base/Atomic.h
|
||
|
@@ -8,6 +8,7 @@
|
||
|
|
||
|
#include <boost/noncopyable.hpp>
|
||
|
#include <stdint.h>
|
||
|
+#include <muduo/base/Mutex.h>
|
||
|
|
||
|
namespace muduo
|
||
|
{
|
||
|
@@ -83,10 +84,88 @@ class AtomicIntegerT : boost::noncopyable
|
||
|
private:
|
||
|
volatile T value_;
|
||
|
};
|
||
|
+
|
||
|
+template<typename T>
|
||
|
+class AtomicIntegerLock : boost::noncopyable
|
||
|
+{
|
||
|
+ public:
|
||
|
+ AtomicIntegerLock()
|
||
|
+ : value_(0)
|
||
|
+ {
|
||
|
+ }
|
||
|
+
|
||
|
+ // uncomment if you need copying and assignment
|
||
|
+ //
|
||
|
+ // AtomicIntegerT(const AtomicIntegerT& that)
|
||
|
+ // : value_(that.get())
|
||
|
+ // {}
|
||
|
+ //
|
||
|
+ // AtomicIntegerT& operator=(const AtomicIntegerT& that)
|
||
|
+ // {
|
||
|
+ // getAndSet(that.get());
|
||
|
+ // return *this;
|
||
|
+ // }
|
||
|
+
|
||
|
+ T get()
|
||
|
+ {
|
||
|
+ MutexLockGuard lock(mutex_);
|
||
|
+ return value_;
|
||
|
+ }
|
||
|
+
|
||
|
+ T getAndAdd(T x)
|
||
|
+ {
|
||
|
+ MutexLockGuard lock(mutex_);
|
||
|
+ T old = value_;
|
||
|
+ value_ += x;
|
||
|
+ return old;
|
||
|
+ }
|
||
|
+
|
||
|
+ T addAndGet(T x)
|
||
|
+ {
|
||
|
+ return getAndAdd(x) + x;
|
||
|
+ }
|
||
|
+
|
||
|
+ T incrementAndGet()
|
||
|
+ {
|
||
|
+ return addAndGet(1);
|
||
|
+ }
|
||
|
+
|
||
|
+ T decrementAndGet()
|
||
|
+ {
|
||
|
+ return addAndGet(-1);
|
||
|
+ }
|
||
|
+
|
||
|
+ void add(T x)
|
||
|
+ {
|
||
|
+ getAndAdd(x);
|
||
|
+ }
|
||
|
+
|
||
|
+ void increment()
|
||
|
+ {
|
||
|
+ incrementAndGet();
|
||
|
+ }
|
||
|
+
|
||
|
+ void decrement()
|
||
|
+ {
|
||
|
+ decrementAndGet();
|
||
|
+ }
|
||
|
+
|
||
|
+ T getAndSet(T newValue)
|
||
|
+ {
|
||
|
+ MutexLockGuard lock(mutex_);
|
||
|
+ T old = value_;
|
||
|
+ value_ = newValue;
|
||
|
+ return old;
|
||
|
+ }
|
||
|
+
|
||
|
+ private:
|
||
|
+ volatile T value_;
|
||
|
+ MutexLock mutex_;
|
||
|
+};
|
||
|
}
|
||
|
|
||
|
typedef detail::AtomicIntegerT<int32_t> AtomicInt32;
|
||
|
-typedef detail::AtomicIntegerT<int64_t> AtomicInt64;
|
||
|
+typedef detail::AtomicIntegerLock<int64_t> AtomicInt64;
|
||
|
}
|
||
|
|
||
|
#endif // MUDUO_BASE_ATOMIC_H
|
||
|
diff --git a/muduo/base/tests/CMakeLists.txt b/muduo/base/tests/CMakeLists.txt
|
||
|
index 2c3f1c4..73d90fd 100644
|
||
|
--- a/muduo/base/tests/CMakeLists.txt
|
||
|
+++ b/muduo/base/tests/CMakeLists.txt
|
||
|
@@ -2,7 +2,7 @@
|
||
|
target_link_libraries(asynclogging_test muduo_base)
|
||
|
|
||
|
add_executable(atomic_unittest Atomic_unittest.cc)
|
||
|
-# target_link_libraries(atomic_unittest muduo_base)
|
||
|
+target_link_libraries(atomic_unittest muduo_base)
|
||
|
|
||
|
add_executable(blockingqueue_test BlockingQueue_test.cc)
|
||
|
target_link_libraries(blockingqueue_test muduo_base)
|