1.互斥量
pthread_mutex_t
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destory(pthread_mutex_t *mutex);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
///参数tsptr指的是绝对时间,不是相对时间
int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);
2.读写锁
pthread_rwlock_t
3.条件变量
pthread_cond_t
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
int pthread_cond_destory(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);
4.自旋锁
pthread_spinlock_t
自旋锁与互斥量类似,但它不通过休眠阻塞线程,而是在获取锁之前一直处于忙等(自旋)阻塞状态。自旋锁可用于以下情况:锁被持有时间短,而且线程不希望在重新调度上花费太多的时间。
#include <pthread.h>
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);
5.屏障
pthread_barrier_t
#include <pthread.h>
int pthread_barrier_init(pthread_baarrier_t *restrict barrier, const pthread_barrierattr_t *restrict arrt, unsigned int count);
int pthread_barrier_destroy(pthread_baarrier_t *restrict barrier);
int pthread_barrier_wait(pthread_baarrier_t *restrict barrier);