#include<pthread.h>
互斥锁——用于主动获取共享资源时的互斥与等待
- 多个线程锁定同一临界区时,解锁后,优先级最高的线程被优先执行
- 静态初始化
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- API
int pthread_mutexattr_init(pthread_mutexattr_t*);int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int);PTHREAD_PROCESS_SHARED/PTHREAD_PROCESS_PRIVATE
在<uinstd.h>中定义了_POSIX_THREAD_PROCESS_SHARED时才能指定进程间共享属性int pthread_mutexattr_getpshared(pthread_mutexattr_t*, int);
int pthread_mutexattr_destroy(pthread_mutexattr_t*);
条件变量——用于获取共享资源时受到被动的提醒int pthread_mutex_init(pthread_mutex_t* , pthread_mutexattr_t*);
int pthread_mutex_lock(pthread_mutex_t*);
int pthread_mutex_trylock(pthread_mutex_t*);
int pthread_mutex_unlock(pthread_mutex_t*);
int pthread_mutex_destroy(pthread_mutex_t*);
- 静态初始化
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
- API
int pthread_condattr_init(pthread_mutexattr_t*);int pthread_condattr_setpshared(pthread_condattr_t*, int);int pthread_condattr_getpshared(pthread_condattr_t*, int);
int pthread_condattr_destroy(pthread_mutexattr_t*);
int pthread_cond_init(pthread_cond_t * );
int pthread_cond_wait(pthread_cond_t *,pthread_mutex_t* );
int pthread_cond_timedwait(pthread_cond_t *,pthread_mutex_t* , const struct timespec *abstime);
此处采用绝对时间,好处是,若因为捕获到信号而提前解阻塞,再次进入阻塞态时无须修改时间参数
int pthread_cond_signal(pthread_cond_t *);
int pthread_cond_broadcast(pthread_cond_t *);
int pthread_cond_destroy(pthread_cond_t *);
- 调用例程
pthread_mutex_lock(mutex4test); //保护对测试变量的读取
while(test) //测试变量
pthread_cond_wait(cond,mutex4test ); //解锁对测试变量的保护并阻塞等待 解阻塞后继续锁定测试变量
pthread_mutex_unlock(mutex4test); //解除对测试变量的保护