线程同步API
Posted 会飞的小丑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程同步API相关的知识,希望对你有一定的参考价值。
头文件:<pthread.h> 编译记得加 -lpthread库
1:互斥锁(mutex)
数据类型:pthread_mutex_t
操作API:
// 初始化一个互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t attr); or mutex = PTHREAD_MUTEX_INITIALIZER; // 销毁一个互斥锁 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_timedlock(pthread_mutex_t *mutex, const struct timespec *time);
// 释放一个互斥锁 int pthread_mutex_unlock(pthread_mutex_t *mutex); 以上函数返回值:成功0,失败设置errno
2:读写锁
数据类型:pthread_rwlock_t
操作API:
// 初始化读写锁 int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr); or rwlock = PTHREAD_RWLOCK_INITIALIZER; // 销毁读写锁 int pthread_rwlock_destory(pthread_rwlock_t *rwlock); // 读方式获取锁 int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); // 非阻塞读方式获取锁 int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); // 带有超时的读方式获取锁 int pthread_rwlock_timedrdlock(pthread_rwlock_t *rwlock, const struct timespec *time); // 写方式获取锁 int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); // 非阻塞写方式获取锁 int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); // 带有超时的写方式获取锁 int pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *time); // 解锁 int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
以上函数返回值:成功0,失败设置errno
注:读写锁适合使用在临界资源读频率远高于写频率的情况下。
当临界资源位于读锁定情况下,读方式获取锁会成功,写方式获取锁会被阻塞(如有一个线程以写方式获取锁时,内核通常会阻塞之后的以读方式获取锁的进程,防止临界资源一直被读锁定占用)
当临界资源位于写锁定情况下,读或写方式获取锁都是被阻塞
3:条件变量
数据类型:pthread_cond_t
操作API:
锁
以上是关于线程同步API的主要内容,如果未能解决你的问题,请参考以下文章