首页 > 编程语言 > 详细

线程同步API

时间:2017-08-20 23:39:19      阅读:211      评论:0      收藏:0      [点我收藏+]

头文件:<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

原文:http://www.cnblogs.com/Flychown/p/7401819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!