Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mgiza.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mgizapp/src/syncObj.h')
-rw-r--r--mgizapp/src/syncObj.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/mgizapp/src/syncObj.h b/mgizapp/src/syncObj.h
new file mode 100644
index 0000000..1c1b31d
--- /dev/null
+++ b/mgizapp/src/syncObj.h
@@ -0,0 +1,48 @@
+#ifndef __SYNC_OBJ_H__
+#define __SYNC_OBJ_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <iostream>
+
+class Mutex{
+ private:
+ mutable pthread_mutex_t mutex;
+
+ public:
+ Mutex(){pthread_mutex_init(&mutex,NULL);};
+ ~Mutex(){pthread_mutex_destroy(&mutex);}
+
+ public:
+ inline void lock() const{pthread_mutex_lock(&mutex);};
+ inline void unlock() const{pthread_mutex_unlock(&mutex);};
+};
+
+class SyncDouble{
+private:
+ double i;
+ Mutex m;
+public:
+ SyncDouble(double d) {i=d;};
+ SyncDouble() {i=0;};
+ //inline operator const double()const{return i;}
+ inline bool operator ==(const double& r) const{return i == r;};
+ inline void operator +=(const double& r) {m.lock();i += r;m.unlock();};
+ inline void operator +=(const SyncDouble& r) {m.lock();i += r.i;m.unlock();};
+ inline void operator -=(const double& r) {m.lock();i -= r;m.unlock();};
+ inline void operator *=(const double& r) {m.lock();i *= r;m.unlock();};
+ inline void operator /=(const double& r) {m.lock();i /= r;m.unlock();};
+ inline double operator =(const double& r) {m.lock();i = r;m.unlock();return i;};
+ inline double operator =(const int& r) {m.lock();i = r;m.unlock();return i;};
+ inline void operator ++() {m.lock();i++;m.unlock();};
+ inline double operator +(const SyncDouble& r){return r.i+i;};
+ inline double operator /(const SyncDouble& r){return i/r.i;};
+ //inline void operator --() {m.lock();i--;m.unlock();};
+ //inline const istream& operator<<(const istream& p)const{p<<i;return p;};
+ friend ostream& operator<<( ostream& p,const SyncDouble& d);
+};
+
+inline ostream& operator<<( ostream& p, const SyncDouble& d){p<<d.i;return p;};
+
+#endif