< prev index next >
src/hotspot/share/gc/z/zLock.inline.hpp
Print this page
*** 23,37 ****
--- 23,44 ----
#ifndef SHARE_GC_Z_ZLOCK_INLINE_HPP
#define SHARE_GC_Z_ZLOCK_INLINE_HPP
#include "gc/z/zLock.hpp"
+ #include "runtime/atomic.hpp"
+ #include "runtime/thread.hpp"
+ #include "utilities/debug.hpp"
inline ZLock::ZLock() {
pthread_mutex_init(&_lock, NULL);
}
+ inline ZLock::~ZLock() {
+ pthread_mutex_destroy(&_lock);
+ }
+
inline void ZLock::lock() {
pthread_mutex_lock(&_lock);
}
inline bool ZLock::try_lock() {
*** 40,54 ****
inline void ZLock::unlock() {
pthread_mutex_unlock(&_lock);
}
! inline ZLocker::ZLocker(ZLock* lock) :
_lock(lock) {
_lock->lock();
}
! inline ZLocker::~ZLocker() {
_lock->unlock();
}
#endif // SHARE_GC_Z_ZLOCK_INLINE_HPP
--- 47,98 ----
inline void ZLock::unlock() {
pthread_mutex_unlock(&_lock);
}
! inline ZReentrantLock::ZReentrantLock() :
! _lock(),
! _owner(NULL),
! _count(0) {}
!
! inline void ZReentrantLock::lock() {
! Thread* const thread = Thread::current();
! Thread* const owner = Atomic::load(&_owner);
!
! if (owner != thread) {
! _lock.lock();
! Atomic::store(thread, &_owner);
! }
!
! _count++;
! }
!
! inline void ZReentrantLock::unlock() {
! assert(is_owned(), "Invalid owner");
! assert(_count > 0, "Invalid count");
!
! _count--;
!
! if (_count == 0) {
! Atomic::store((Thread*)NULL, &_owner);
! _lock.unlock();
! }
! }
!
! inline bool ZReentrantLock::is_owned() const {
! Thread* const thread = Thread::current();
! Thread* const owner = Atomic::load(&_owner);
! return owner == thread;
! }
!
! template <typename T>
! inline ZLocker<T>::ZLocker(T* lock) :
_lock(lock) {
_lock->lock();
}
! template <typename T>
! inline ZLocker<T>::~ZLocker() {
_lock->unlock();
}
#endif // SHARE_GC_Z_ZLOCK_INLINE_HPP
< prev index next >