同步——读写锁
来源:互联网 发布:收据打印软件 注册码 编辑:程序博客网 时间:2024/04/30 02:47
读写锁,又称为共享-独占锁,其类型为pthread_rwlock_t ,静态初始化通过赋值PTHREAD_RWLOCK_INITIALIZER
#include <pthread.h>int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr); // return 0/errnoint pthread_rwlock_destroy(pthread_rwlock_t *rwptr); // return 0/errnoint pthread_rwlock_rdlock(pthread_rwlock_t *rwptr); // return 0/errno, if written, blockedint pthread_rwlock_wrlock(pthread_rwlock_t *rwptr); // return 0/errno, if read, blockedint pthread_rwlock_unlock(pthread_rwlock_t *rwptr); // return 0/errnoint pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr); // return 0/errno, if written, return EBUSYint pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr); // return 0/errno, if read, return EBUSYint pthread_rwlockattr_init(pthread_rwlockattr_t *attr); // return 0/errnoint pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr); // return 0/errnoint pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *valptr); // return 0/errnoint pthread_rwlockattr_getpshared(pthread_rwlockattr_t *attr, int *valptr); // return 0/errno/**valptr = PTHREAD_PROCESS_PRIVATE/PTHREAD_PROCESS_SHARED, as one value-result*/如果pthread_cond_wait调用阻塞,随后被取消,该线程就在持有互斥锁的情况下终止,为处理被取消的可能情况,任何线程可以安装删除清理处理程序
void pthread_cleanup_push(void (*function)(void *), void *arg);void pthread_cleanup_pop(int execute);
这些处理程序就是发生在调用线程被取消或自愿终止的情况下,push的function参数是调用线程被取消时所调用的函数的地址,arg为参数;pop总是删除栈顶的函数,而且若execute不为0,那就调用该函数。
void cancelwait(void* arg){ pthread_mutex_t * m = arg; pthread_mutex_unlock(m);}// segment{ pthread_cleanup_push(cancelwait,(void*)pMutex); pthread_cond_wait(pCond, pMutex); pthread_cleanup_pop(0);}
读写锁是在单个进程内的线程间共享时,变量在那个进程中;当读写锁在共享某个内存区的进程间共享时,它要指定PTHREAD_PROCESS_SHARED属性,且该变量应该在共享内存区中。
- 同步——读写锁
- 线程同步——读写锁
- 多线程同步——读写锁
- Linux下线程同步对象(2)——读写锁
- Linux下线程同步对象(2)——读写锁
- 线程与同步之三——读写锁
- 同步机制——“读写锁“的实现
- 线程间同步与互斥——读写锁
- 同步(三)读写锁
- 同步与读写锁
- 线程同步-读写锁
- 锁,同步,可重入锁,读写锁
- 锁,同步,可重入锁,读写锁
- 锁,同步,可重入锁,读写锁
- 2线程同步:读写锁
- 同步 互斥锁 读写锁 区别
- Linux线程同步-----读写锁
- 【Linux多线程同步】读写锁
- ios音频播放
- 今天下午调试了一下IE6.0的bug
- Android布局相关
- QT 多线程程序设计
- Expecting "jsp:param" standard action with "name" and "value" attributes
- 同步——读写锁
- 按小时统计数据,无数据的时间点填充为0的实现方法
- HDU 3572——Task Schedule
- 【7gyy】如何修改Win7资源管理器默认路径
- PHP session 跨子域问题总结
- spring mvc 框架搭建及详解
- action中获取request
- 组合模式
- js学习篇