1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
   | #ifndef LOCKER_H #define LOCKER_H
  #include <exception> #include <pthread.h> #include <semaphore.h>
  class sem {  public:   sem() {     if (sem_init(&m_sem, 0, 0) != 0) {       throw std::exception();     }   }   ~sem() {     sem_destroy(&m_sem);   }   bool wait() {     return sem_wait(&m_sem) == 0;   }   bool post() {     return sem_post(&m_sem) == 0;   }
   private:   sem_t m_sem; };
  class locker {  public:   locker() {     if (pthread_mutex_init(&m_mutex, NULL) != 0) {       throw std::exception();     }   }
    ~locker() {     pthread_mutex_destroy(&m_mutex);   }
    bool lock() {     return pthread_mutex_lock(&m_mutex) == 0;   }
    bool unlock() {     return pthread_mutex_unlock(&m_mutex) == 0;   }
   private:   pthread_mutex_t m_mutex; };
 
  class cond {  public:   cond() {     if (pthread_mutex_init(&m_mutex, NULL) != 0) {       throw std::exception();     }     if (pthread_cond_init(&m_cond, NULL) != 0) {       pthread_mutex_destroy(&m_mutex);        throw std::exception();     }   }
    ~cond() {     pthread_mutex_destroy(&m_mutex);     pthread_cond_destroy(&m_cond);   }
    bool wait() {     int ret = 0;     pthread_mutex_lock(&m_mutex);     ret = pthread_cond_wait(&m_cond, &m_mutex);     pthread_mutex_unlock(&m_mutex);     return ret == 0;   }
    bool signal() {     return pthread_cond_signal(&m_cond) == 0;   }
   private:   pthread_mutex_t m_mutex;   pthread_cond_t m_cond; };
  #endif
   | 
 
充分复用代码供后续使用。
reference:高性能服务器编程——游双$P_{280}$