线程同步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的主要内容,如果未能解决你的问题,请参考以下文章

线程同步

起底多线程同步锁(iOS)

线程操作API

多线程编程

Java并发编程:多线程环境中安全使用集合API(含代码)

线程同步