mirror of
https://github.com/openjdk/jdk.git
synced 2026-01-28 03:58:21 +00:00
8374683: ZGC: Convert zLock to use Atomic<T>
Reviewed-by: stefank, tschatzl
This commit is contained in:
parent
99b4e05d50
commit
6648567574
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -25,6 +25,7 @@
|
|||||||
#define SHARE_GC_Z_ZLOCK_HPP
|
#define SHARE_GC_Z_ZLOCK_HPP
|
||||||
|
|
||||||
#include "memory/allocation.hpp"
|
#include "memory/allocation.hpp"
|
||||||
|
#include "runtime/atomic.hpp"
|
||||||
#include "runtime/mutex.hpp"
|
#include "runtime/mutex.hpp"
|
||||||
|
|
||||||
class ZLock : public CHeapObj<mtGC> {
|
class ZLock : public CHeapObj<mtGC> {
|
||||||
@ -39,9 +40,9 @@ public:
|
|||||||
|
|
||||||
class ZReentrantLock {
|
class ZReentrantLock {
|
||||||
private:
|
private:
|
||||||
ZLock _lock;
|
ZLock _lock;
|
||||||
Thread* volatile _owner;
|
Atomic<Thread*> _owner;
|
||||||
uint64_t _count;
|
uint64_t _count;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ZReentrantLock();
|
ZReentrantLock();
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2015, 2026, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
#include "gc/z/zLock.hpp"
|
#include "gc/z/zLock.hpp"
|
||||||
|
|
||||||
#include "runtime/atomicAccess.hpp"
|
|
||||||
#include "runtime/javaThread.hpp"
|
#include "runtime/javaThread.hpp"
|
||||||
#include "runtime/os.inline.hpp"
|
#include "runtime/os.inline.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
@ -50,11 +49,11 @@ inline ZReentrantLock::ZReentrantLock()
|
|||||||
|
|
||||||
inline void ZReentrantLock::lock() {
|
inline void ZReentrantLock::lock() {
|
||||||
Thread* const thread = Thread::current();
|
Thread* const thread = Thread::current();
|
||||||
Thread* const owner = AtomicAccess::load(&_owner);
|
Thread* const owner = _owner.load_relaxed();
|
||||||
|
|
||||||
if (owner != thread) {
|
if (owner != thread) {
|
||||||
_lock.lock();
|
_lock.lock();
|
||||||
AtomicAccess::store(&_owner, thread);
|
_owner.store_relaxed(thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
_count++;
|
_count++;
|
||||||
@ -67,14 +66,14 @@ inline void ZReentrantLock::unlock() {
|
|||||||
_count--;
|
_count--;
|
||||||
|
|
||||||
if (_count == 0) {
|
if (_count == 0) {
|
||||||
AtomicAccess::store(&_owner, (Thread*)nullptr);
|
_owner.store_relaxed(nullptr);
|
||||||
_lock.unlock();
|
_lock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool ZReentrantLock::is_owned() const {
|
inline bool ZReentrantLock::is_owned() const {
|
||||||
Thread* const thread = Thread::current();
|
Thread* const thread = Thread::current();
|
||||||
Thread* const owner = AtomicAccess::load(&_owner);
|
Thread* const owner = _owner.load_relaxed();
|
||||||
return owner == thread;
|
return owner == thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user