Mercurial > foo_out_sdl
view foosdk/sdk/pfc/synchro_nix.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line source
#pragma once #include <pthread.h> namespace pfc { class mutexAttr { public: mutexAttr() {pthread_mutexattr_init(&attr);} ~mutexAttr() {pthread_mutexattr_destroy(&attr);} void setType(int type) {pthread_mutexattr_settype(&attr, type);} int getType() const {int rv = 0; pthread_mutexattr_gettype(&attr, &rv); return rv; } void setRecursive() {setType(PTHREAD_MUTEX_RECURSIVE);} bool isRecursive() {return getType() == PTHREAD_MUTEX_RECURSIVE;} void setProcessShared() {pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);} operator const pthread_mutexattr_t & () const {return attr;} operator pthread_mutexattr_t & () {return attr;} pthread_mutexattr_t attr; private: mutexAttr(const mutexAttr&) = delete; void operator=(const mutexAttr&) = delete; }; class mutexBase { public: void lock() noexcept {pthread_mutex_lock(&obj);} void unlock() noexcept {pthread_mutex_unlock(&obj);} void enter() noexcept {lock();} void leave() noexcept {unlock();} bool tryEnter() noexcept {return pthread_mutex_trylock(&obj) == 0; } void create( const pthread_mutexattr_t * attr ); void create( const mutexAttr & ); void createRecur(); void destroy(); protected: mutexBase() {} ~mutexBase() {} private: pthread_mutex_t obj; void operator=( const mutexBase & ) = delete; mutexBase( const mutexBase & ) = delete; }; class mutex : public mutexBase { public: mutex() {create(NULL);} ~mutex() {destroy();} }; class mutexRecur : public mutexBase { public: mutexRecur() {createRecur();} ~mutexRecur() {destroy();} }; class mutexRecurStatic : public mutexBase { public: mutexRecurStatic() {createRecur();} }; typedef mutexBase mutexBase_t; class readWriteLockAttr { public: readWriteLockAttr() {pthread_rwlockattr_init( & attr ); } ~readWriteLockAttr() {pthread_rwlockattr_destroy( & attr ) ;} void setProcessShared( bool val = true ) { pthread_rwlockattr_setpshared( &attr, val ? PTHREAD_PROCESS_SHARED : PTHREAD_PROCESS_PRIVATE ); } pthread_rwlockattr_t attr; private: readWriteLockAttr(const readWriteLockAttr&) = delete; void operator=(const readWriteLockAttr & ) = delete; }; class readWriteLockBase { public: void create( const pthread_rwlockattr_t * attr ); void create( const readWriteLockAttr & ); void destroy() {pthread_rwlock_destroy( & obj ); } void enterRead() noexcept {pthread_rwlock_rdlock( &obj ); } void enterWrite() noexcept {pthread_rwlock_wrlock( &obj ); } void leaveRead() noexcept {pthread_rwlock_unlock( &obj ); } void leaveWrite() noexcept {pthread_rwlock_unlock( &obj ); } protected: readWriteLockBase() {} ~readWriteLockBase() {} private: pthread_rwlock_t obj; void operator=( const readWriteLockBase & ) = delete; readWriteLockBase( const readWriteLockBase & ) = delete; }; class readWriteLock : public readWriteLockBase { public: readWriteLock() {create(NULL);} ~readWriteLock() {destroy();} }; } typedef pfc::mutexRecur critical_section; typedef pfc::mutexRecurStatic critical_section_static;
