mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 06:25:18 +00:00
Support: make LLVM Mutexes STL-compatible
Use lock/unlock() convention instead of acquire/release(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216336 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -86,16 +86,17 @@ namespace llvm
|
||||
/// indicates whether this mutex should become a no-op when we're not
|
||||
/// running in multithreaded mode.
|
||||
template<bool mt_only>
|
||||
class SmartMutex : public MutexImpl {
|
||||
class SmartMutex {
|
||||
MutexImpl impl;
|
||||
unsigned acquired;
|
||||
bool recursive;
|
||||
public:
|
||||
explicit SmartMutex(bool rec = true) :
|
||||
MutexImpl(rec), acquired(0), recursive(rec) { }
|
||||
impl(rec), acquired(0), recursive(rec) { }
|
||||
|
||||
bool acquire() {
|
||||
bool lock() {
|
||||
if (!mt_only || llvm_is_multithreaded()) {
|
||||
return MutexImpl::acquire();
|
||||
return impl.acquire();
|
||||
} else {
|
||||
// Single-threaded debugging code. This would be racy in
|
||||
// multithreaded mode, but provides not sanity checks in single
|
||||
@@ -106,9 +107,9 @@ namespace llvm
|
||||
}
|
||||
}
|
||||
|
||||
bool release() {
|
||||
bool unlock() {
|
||||
if (!mt_only || llvm_is_multithreaded()) {
|
||||
return MutexImpl::release();
|
||||
return impl.release();
|
||||
} else {
|
||||
// Single-threaded debugging code. This would be racy in
|
||||
// multithreaded mode, but provides not sanity checks in single
|
||||
@@ -120,9 +121,9 @@ namespace llvm
|
||||
}
|
||||
}
|
||||
|
||||
bool tryacquire() {
|
||||
bool try_lock() {
|
||||
if (!mt_only || llvm_is_multithreaded())
|
||||
return MutexImpl::tryacquire();
|
||||
return impl.tryacquire();
|
||||
else return true;
|
||||
}
|
||||
|
||||
@@ -140,11 +141,11 @@ namespace llvm
|
||||
|
||||
public:
|
||||
SmartScopedLock(SmartMutex<mt_only>& m) : mtx(m) {
|
||||
mtx.acquire();
|
||||
mtx.lock();
|
||||
}
|
||||
|
||||
~SmartScopedLock() {
|
||||
mtx.release();
|
||||
mtx.unlock();
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -29,8 +29,8 @@ namespace llvm {
|
||||
MutexGuard(const MutexGuard &) LLVM_DELETED_FUNCTION;
|
||||
void operator=(const MutexGuard &) LLVM_DELETED_FUNCTION;
|
||||
public:
|
||||
MutexGuard(sys::Mutex &m) : M(m) { M.acquire(); }
|
||||
~MutexGuard() { M.release(); }
|
||||
MutexGuard(sys::Mutex &m) : M(m) { M.lock(); }
|
||||
~MutexGuard() { M.unlock(); }
|
||||
/// holds - Returns true if this locker instance holds the specified lock.
|
||||
/// This is mostly used in assertions to validate that the correct mutex
|
||||
/// is held.
|
||||
|
@@ -85,14 +85,15 @@ namespace llvm
|
||||
/// indicates whether this mutex should become a no-op when we're not
|
||||
/// running in multithreaded mode.
|
||||
template<bool mt_only>
|
||||
class SmartRWMutex : public RWMutexImpl {
|
||||
class SmartRWMutex {
|
||||
RWMutexImpl impl;
|
||||
unsigned readers, writers;
|
||||
public:
|
||||
explicit SmartRWMutex() : RWMutexImpl(), readers(0), writers(0) { }
|
||||
explicit SmartRWMutex() : impl(), readers(0), writers(0) { }
|
||||
|
||||
bool reader_acquire() {
|
||||
bool lock_shared() {
|
||||
if (!mt_only || llvm_is_multithreaded())
|
||||
return RWMutexImpl::reader_acquire();
|
||||
return impl.reader_acquire();
|
||||
|
||||
// Single-threaded debugging code. This would be racy in multithreaded
|
||||
// mode, but provides not sanity checks in single threaded mode.
|
||||
@@ -100,9 +101,9 @@ namespace llvm
|
||||
return true;
|
||||
}
|
||||
|
||||
bool reader_release() {
|
||||
bool unlock_shared() {
|
||||
if (!mt_only || llvm_is_multithreaded())
|
||||
return RWMutexImpl::reader_release();
|
||||
return impl.reader_release();
|
||||
|
||||
// Single-threaded debugging code. This would be racy in multithreaded
|
||||
// mode, but provides not sanity checks in single threaded mode.
|
||||
@@ -111,9 +112,9 @@ namespace llvm
|
||||
return true;
|
||||
}
|
||||
|
||||
bool writer_acquire() {
|
||||
bool lock() {
|
||||
if (!mt_only || llvm_is_multithreaded())
|
||||
return RWMutexImpl::writer_acquire();
|
||||
return impl.writer_acquire();
|
||||
|
||||
// Single-threaded debugging code. This would be racy in multithreaded
|
||||
// mode, but provides not sanity checks in single threaded mode.
|
||||
@@ -122,9 +123,9 @@ namespace llvm
|
||||
return true;
|
||||
}
|
||||
|
||||
bool writer_release() {
|
||||
bool unlock() {
|
||||
if (!mt_only || llvm_is_multithreaded())
|
||||
return RWMutexImpl::writer_release();
|
||||
return impl.writer_release();
|
||||
|
||||
// Single-threaded debugging code. This would be racy in multithreaded
|
||||
// mode, but provides not sanity checks in single threaded mode.
|
||||
@@ -145,11 +146,11 @@ namespace llvm
|
||||
SmartRWMutex<mt_only>& mutex;
|
||||
|
||||
explicit SmartScopedReader(SmartRWMutex<mt_only>& m) : mutex(m) {
|
||||
mutex.reader_acquire();
|
||||
mutex.lock_shared();
|
||||
}
|
||||
|
||||
~SmartScopedReader() {
|
||||
mutex.reader_release();
|
||||
mutex.unlock_shared();
|
||||
}
|
||||
};
|
||||
typedef SmartScopedReader<false> ScopedReader;
|
||||
@@ -160,11 +161,11 @@ namespace llvm
|
||||
SmartRWMutex<mt_only>& mutex;
|
||||
|
||||
explicit SmartScopedWriter(SmartRWMutex<mt_only>& m) : mutex(m) {
|
||||
mutex.writer_acquire();
|
||||
mutex.lock();
|
||||
}
|
||||
|
||||
~SmartScopedWriter() {
|
||||
mutex.writer_release();
|
||||
mutex.unlock();
|
||||
}
|
||||
};
|
||||
typedef SmartScopedWriter<false> ScopedWriter;
|
||||
|
Reference in New Issue
Block a user