1. 程式人生 > >互斥鎖和條件變量(pthread)相關函數

互斥鎖和條件變量(pthread)相關函數

code 數據類型 wait 模式 truct color tro val initial

互斥鎖

#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>

//
以下兩個函數使用條件變量 // 若成功返回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);
pthread_cond_wait必須放在pthread_mutex_lockpthread_mutex_unlock之間,因為他要
根據共享變量的狀態來覺得是否要等待,而為了不永遠等待下去所以必須要在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)相關函數