--- /home/donau101/tools/installscripts/data/blitz/memblock-org.h 2016-04-29 10:00:01.709570847 +0200 +++ /home/donau101/tools/installscripts/data/blitz/memblock-new.h 2016-04-29 10:00:01.700570521 +0200 @@ -152,17 +152,22 @@ void addReference() { #ifdef BZ_DEBUG_LOG_REFERENCES - BZ_MUTEX_LOCK(mutex) - const int refcount = ++references_; - BZ_MUTEX_UNLOCK(mutex) + //BZ_MUTEX_LOCK(mutex) + //const int refcount = ++references_; + //BZ_MUTEX_UNLOCK(mutex) + const int refcount; + #pragma omp atomic capture + refcount = ++references_; cout << "MemoryBlock: reffed " << setw(8) << length_ << " at " << ((void *)dataBlockAddress_) << " (r=" << refcount << ")" << endl; #else - BZ_MUTEX_LOCK(mutex) - ++references_; - BZ_MUTEX_UNLOCK(mutex) + //BZ_MUTEX_LOCK(mutex) + //++references_; + //BZ_MUTEX_UNLOCK(mutex) + #pragma omp atomic update + ++references_; #endif } @@ -189,9 +194,12 @@ int removeReference() { - BZ_MUTEX_LOCK(mutex) - const int refcount = --references_; - BZ_MUTEX_UNLOCK(mutex) + //BZ_MUTEX_LOCK(mutex) + //const int refcount = --references_; + //BZ_MUTEX_UNLOCK(mutex) + int refcount; + #pragma omp atomic capture + refcount = --references_; #ifdef BZ_DEBUG_LOG_REFERENCES cout << "MemoryBlock: dereffed " << setw(8) << length_ @@ -203,9 +211,12 @@ int references() const { - BZ_MUTEX_LOCK(mutex) - const int refcount = references_; - BZ_MUTEX_UNLOCK(mutex) + //BZ_MUTEX_LOCK(mutex) + //const int refcount = references_; + //BZ_MUTEX_UNLOCK(mutex) + int refcount; + #pragma omp atomic read + refcount = references_; return refcount; }