1.一个简单的单例类:
class Singleton { public: static Singleton *getInstance() { if(pInstance_ == NULL){ mutex_.lock(); if(pInstance_ == NULL){ sleep(1); pInstance_ = new Singleton; } mutex_.unlock(); } return pInstance_; } private: Singleton(){} static Singleton *pInstance_; static MutexLock mutex_; }; Singleton *Singleton::pInstance_ = NULL; MutexLock Singleton::mutex_;
互斥锁类:
class MutexLock { public: MutexLock() { if(pthread_mutex_init(&lock_, NULL)){ throw std::runtime_error("init lock fail!"); } } ~MutexLock() { if(pthread_mutex_destroy(&lock_)){ throw std::runtime_error("destroy lock fail"); } } void lock(){ if(pthread_mutex_lock(&lock_)){ throw std::runtime_error("lock failed!"); } } void unlock(){ if(pthread_mutex_unlock(&lock_)){ throw std::runtime_error("unlock failed!"); } } //这里提供指针是为了cond的wait操作 //这里不能为const pthread_mutex_t *getMutexLockPtr() { return &lock_; } private: pthread_mutex_t lock_; };
一个简单的智能指针类:
class SmartPtr { public: SmartPtr(Animal *ptr):ptr_(ptr) { } ~SmartPtr() { delete ptr_; } Animal *operator->() { return ptr_; } const Animal *operator->() const { return ptr_; } Animal &operator*() { return *ptr_; } const Animal &operator*() const { return *ptr_; } private: DISALLOW_COPY_AND_ASSIGN(SmartPtr); T *ptr_; };
时间: 2024-10-03 11:31:45