X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Fos_thread.hpp;h=e5eb19d3604c8dd61c47e5ccd22c4b57f1f72e28;hb=e86f5a2f9b1e57ee2535a285f6385878c78cf0ea;hp=c4bc130d4693b7d9bb201da8675543acdcd4659d;hpb=82311849bbba61d0f1c49bd83abb9ffd52033bf2;p=apitrace diff --git a/common/os_thread.hpp b/common/os_thread.hpp index c4bc130..e5eb19d 100644 --- a/common/os_thread.hpp +++ b/common/os_thread.hpp @@ -139,6 +139,98 @@ namespace os { }; + /** + * Same interface as std::unique_lock; + */ + template< class Mutex > + class unique_lock + { + public: + typedef Mutex mutex_type; + + inline explicit + unique_lock(mutex_type & mutex) : + _mutex(&mutex) + { + _mutex->lock(); + } + + inline + ~unique_lock() { + _mutex->unlock(); + } + + inline void + lock() { + _mutex->lock(); + } + + inline void + unlock() { + _mutex->unlock(); + } + + mutex_type * + mutex() const { + return _mutex; + } + + protected: + mutex_type *_mutex; + }; + + + /** + * Same interface as std::condition_variable + */ + class condition_variable + { + public: +#ifdef _WIN32 + /* FIXME */ +#else + typedef pthread_cond_t native_handle_type; +#endif + + condition_variable() { +#ifdef _WIN32 + /* FIXME */ +#else + pthread_cond_init(&_native_handle, NULL); +#endif + } + + ~condition_variable() { +#ifdef _WIN32 + /* FIXME */ +#else + pthread_cond_destroy(&_native_handle); +#endif + } + + inline void + signal(void) { +#ifdef _WIN32 + /* FIXME */ +#else + pthread_cond_signal(&_native_handle); +#endif + } + + inline void + wait(unique_lock & lock) { +#ifdef _WIN32 + /* FIXME */ +#else + pthread_cond_wait(&_native_handle, &lock.mutex()->native_handle()); +#endif + } + + protected: + native_handle_type _native_handle; + }; + + /** * Same interface as boost::thread_specific_ptr. */