互斥鎖和條件變量(pthread)相關函數
阿新 • • 發佈:2018-09-25
code 數據類型 wait 模式 truct color tro val initial
根據共享變量的狀態來覺得是否要等待,而為了不永遠等待下去所以必須要在lock/unlock
隊中 pthread_cond_signal通常喚醒等在相應條件變量上的單個進程
互斥鎖
#include <pthread.h> // 若成功返回0,出錯返回正的Exxx值 // mptr通常被初始化為PTHREAD_MUTEX_INITIALIZER int pthread_mutex_lock(pthread_mutex_t *mptr); int pthread_mutex_trylock(pthread_mutex_t *mptr); // pthread_mutex_lock 函數的非阻塞模式 int pthread_mutex_unlock(pthread_mutex_t *mptr);
條件變量:
#include <pthread.h> //pthread_cond_wait必須放在pthread_mutex_lock和pthread_mutex_unlock之間,因為他要以下兩個函數使用條件變量 // 若成功返回0,出錯返回正的Exxx值 // cptr通常被初始化為PTHREAD_COND_INITIALIZE int pthread_cond_signal(pthread_cond_t *cptr); // cptr指條件變量的類型 int pthread_cond_wait(pthread_cond_t *cptr, pthread_munex_t *mptr);
根據共享變量的狀態來覺得是否要等待,而為了不永遠等待下去所以必須要在lock/unlock
隊中 pthread_cond_signal通常喚醒等在相應條件變量上的單個進程
#include <pthread.h> //若成功返回0,出錯返回正的Exxx值 int pthread_cond_broadcast(pthread_cond_t *cptr); // 喚醒在相應條件變量上的所有線程 int pthread_cond_timewait(pthread_cond_t *cptr, pthread_munex_t *mptr, // 允許線程設置一個阻塞時間限制 const struct timespec *abstime); // abstime指的是絕對時間,而不是一個時間增量 // abstime通常調用gettimeofday獲取當前時間,將其復制到timespec結構中,再加上期望的時間限制
互斥鎖和條件變量的屬性:
#include <pthread.h> // 使用非默認屬性初始化互斥鎖和條件變量,摧毀使用非默認屬性初始化的互斥鎖和條件變量 int pthread_mutex_init(pthread_mutex_t *mptr, const pthread_mutexattr_t *attr); int pthread_mutex_destory(pthread_mutex_t *mptr); int pthread_cond_init(pthread_cond_t *cptr, const pthread_condattr_t *attr); int pthread_cond_destory(pthread_cond_t *cptr); // 互斥鎖的屬性(pthread_mutexattr_t) 條件變量屬性的數據類型(pthread_condattr_t) // 屬性的初始化和摧毀 // 若成功返回0,出錯返回正的Exxx值 int pthread_mutexattr_t_init(pthread_mutexattr_t *attr); int pthread_mutexattr_t_destory(pthread_mutexattr_t *attr); int pthread_condattr_t_init(pthread_condattr_t *attr); int pthread_condattr_t_destory(pthread_condattr_t *attr); // 獲取/設置互斥鎖和條件變量的屬性 // 若成功返回0,出錯返回正的Exxx值 int pthread_mutexattr_t_getpshared(const pthread_mutexattr_t *attr, int *valptr); int pthread_mutexattr_t_setpshared(pthread_mutexattr_t *attr, int value); int pthread_condattr_t_getpshared(pthread_condattr_t *attr, int *valptr); int pthread_condattr_t_setpshared(pthread_condattr_t *attr, int value); // value的取值(PTHREAD_PROCESS_PRIVATE或PTHREAD_PROCESS_SHARED(進程間共享屬性))
互斥鎖和條件變量(pthread)相關函數