隨筆-204  評論-149  文章-0  trackbacks-0

          信號量

          基本操作

          #include <semaphore.h>
          int sem_init(sem_t *sem, int pshared, unsigned int value);
          int sem_wait(sem_t *sem);          /* P(sem), wait(sem) */
          int sem_post(sem_t *sem);          /* V(sem), signal(sem) */

          int sem_getvalue(sem_t *sem, int *sval);
          int sem_trywait(sem_t *sem);

          int sem_destroy(sem_t *sem);       /* undo sem_init() */

          /* named semaphores - these are less useful here */
          sem_t 
          *sem_open(  );
          int sem_close(sem_t *sem);
          int sem_unlink(const char *name);

          互斥量

          基本操作

          #include <pthread.h>
          int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr);
          pthread_mutex_t mutex 
          = PTHREAD_MUTEX_INITIALIZER;
          int pthread_mutex_lock(pthread_mutex_t *mutex);
          int pthread_mutex_unlock(pthread_mutex_t *mutex);

          int pthread_mutex_trylock(pthread_mutex_t *mutex);
          int pthread_mutex_destroy(pthread_mutex_t *mutex); 

          條件變量

          一種信號機制

          基本操作

          #include <pthread.h>
          int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr);
          pthread_cond_t cond 
          = PTHREAD_COND_INITIALIZER;
          int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
          int pthread_cond_signal(pthread_cond_t *cond);

          int pthread_cond_timedwait(  );
          int pthread_cond_broadcast(pthread_cond_t *cond);
          int pthread_cond_destroy(pthread_cond_t *cond); 

          互斥量A保護條件變量B

          //等待方
          pthread_mutex_lock(&A);
          while(){//檢查條件是否滿足
              pthread_cond_wait(&B, &A);
          }

            
          /* wait會隱式解鎖A */
            
          /* wait后A會被隱式鎖住A */
          pthread_mutex_unlock(
          &A);

          //通知方
          pthread_mutex_lock(&A);
          pthread_cond_signal(
          &B);
          pthread_mutex_unlock(
          &A);
          posted on 2009-07-05 01:02 Frank_Fang 閱讀(618) 評論(0)  編輯  收藏 所屬分類: Linux | ACE網絡編程
          主站蜘蛛池模板: 天祝| 张掖市| 石嘴山市| 宜昌市| 衡东县| 井冈山市| 家居| 米易县| 潜山县| 阳山县| 玛纳斯县| 临海市| 大安市| 宜丰县| 铜鼓县| 鄱阳县| 乌兰浩特市| 会宁县| 军事| 宁夏| 常山县| 翁牛特旗| 金塔县| 达州市| 凤凰县| 盱眙县| 班玛县| 泉州市| 称多县| 烟台市| 丹凤县| 霞浦县| 清徐县| 紫金县| 边坝县| 嘉兴市| 惠东县| 江孜县| 黎平县| 紫云| 开原市|