⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 criticalsection.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 H
字号:
#ifndef UTILS_BASE_CRITICALSECTION_H_#define UTILS_BASE_CRITICALSECTION_H_#ifdef WIN32#include "win32.h"#endif#ifdef POSIX#include <pthread.h>#endif#ifdef _DEBUG#define CS_TRACK_OWNER 1#endif  // _DEBUG#if CS_TRACK_OWNER#define TRACK_OWNER(x) x#else  // !CS_TRACK_OWNER#define TRACK_OWNER(x)#endif  // !CS_TRACK_OWNERnamespace utils_base {/// win32 platform#ifdef WIN32class CriticalSection {public:  CriticalSection() {    InitializeCriticalSection(&crit_);    // Windows docs say 0 is not a valid thread id    TRACK_OWNER(thread_ = 0);  }  ~CriticalSection() {    DeleteCriticalSection(&crit_);  }  void Enter() {    EnterCriticalSection(&crit_);    TRACK_OWNER(thread_ = GetCurrentThreadId());  }  void Leave() {    TRACK_OWNER(thread_ = 0);    LeaveCriticalSection(&crit_);  }#if CS_TRACK_OWNER  bool CurrentThreadIsOwner() const { return thread_ == GetCurrentThreadId(); }#endif  // CS_TRACK_OWNERprivate:  CRITICAL_SECTION crit_;  TRACK_OWNER(DWORD thread_);  // The section's owning thread id};#endif // WIN32/// posix platform#ifdef POSIXclass CriticalSection {public:  CriticalSection() {    pthread_mutexattr_t mutex_attribute;    pthread_mutexattr_settype(&mutex_attribute, PTHREAD_MUTEX_RECURSIVE);    pthread_mutex_init(&mutex_, &mutex_attribute);  }  ~CriticalSection() {    pthread_mutex_destroy(&mutex_);  }  void Enter() {    pthread_mutex_lock(&mutex_);  }  void Leave() {    pthread_mutex_unlock(&mutex_);  }private:  pthread_mutex_t mutex_;};#endif // POSIX/// CritScope, for serializing exection through a scopeclass CritScope {public:  CritScope(CriticalSection *pcrit) {    pcrit_ = pcrit;    pcrit_->Enter();  }  ~CritScope() {    pcrit_->Leave();  }private:  CriticalSection *pcrit_;};} // namespace utils_base#endif // UTILS_BASE_CRITICALSECTION_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -