Buckets:
| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| // | |
| // Abstract interface to shared reader/writer log, hiding platform and | |
| // configuration differences. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| namespace libunwind { | |
| class _LIBUNWIND_HIDDEN RWMutex { | |
| public: | |
| bool lock_shared() { return true; } | |
| bool unlock_shared() { return true; } | |
| bool lock() { return true; } | |
| bool unlock() { return true; } | |
| }; | |
| class _LIBUNWIND_HIDDEN RWMutex { | |
| public: | |
| bool lock_shared() { | |
| AcquireSRWLockShared(&_lock); | |
| return true; | |
| } | |
| bool unlock_shared() { | |
| ReleaseSRWLockShared(&_lock); | |
| return true; | |
| } | |
| bool lock() { | |
| AcquireSRWLockExclusive(&_lock); | |
| return true; | |
| } | |
| bool unlock() { | |
| ReleaseSRWLockExclusive(&_lock); | |
| return true; | |
| } | |
| private: | |
| SRWLOCK _lock = SRWLOCK_INIT; | |
| }; | |
| class _LIBUNWIND_HIDDEN RWMutex { | |
| public: | |
| bool lock_shared() { return pthread_rwlock_rdlock(&_lock) == 0; } | |
| bool unlock_shared() { return pthread_rwlock_unlock(&_lock) == 0; } | |
| bool lock() { return pthread_rwlock_wrlock(&_lock) == 0; } | |
| bool unlock() { return pthread_rwlock_unlock(&_lock) == 0; } | |
| private: | |
| pthread_rwlock_t _lock = PTHREAD_RWLOCK_INITIALIZER; | |
| }; | |
| extern "C" int __attribute__((weak)) | |
| pthread_create(pthread_t *thread, const pthread_attr_t *attr, | |
| void *(*start_routine)(void *), void *arg); | |
| extern "C" int __attribute__((weak)) | |
| pthread_rwlock_rdlock(pthread_rwlock_t *lock); | |
| extern "C" int __attribute__((weak)) | |
| pthread_rwlock_wrlock(pthread_rwlock_t *lock); | |
| extern "C" int __attribute__((weak)) | |
| pthread_rwlock_unlock(pthread_rwlock_t *lock); | |
| // Calls to the locking functions are gated on pthread_create, and not the | |
| // functions themselves, because the data structure should only be locked if | |
| // another thread has been created. This is what similar libraries do. | |
| class _LIBUNWIND_HIDDEN RWMutex { | |
| public: | |
| bool lock_shared() { | |
| return !pthread_create || (pthread_rwlock_rdlock(&_lock) == 0); | |
| } | |
| bool unlock_shared() { | |
| return !pthread_create || (pthread_rwlock_unlock(&_lock) == 0); | |
| } | |
| bool lock() { | |
| return !pthread_create || (pthread_rwlock_wrlock(&_lock) == 0); | |
| } | |
| bool unlock() { | |
| return !pthread_create || (pthread_rwlock_unlock(&_lock) == 0); | |
| } | |
| private: | |
| pthread_rwlock_t _lock = PTHREAD_RWLOCK_INITIALIZER; | |
| }; | |
| } // namespace libunwind | |
Xet Storage Details
- Size:
- 3.01 kB
- Xet hash:
- 6d1b42ff7e1759273b2f2aeed87bdc4e47e80316c763c5cd23d4f6c172918df7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.