同步——读写锁
2013-05-07 17:39
337 查看
读写锁,又称为共享-独占锁,其类型为pthread_rwlock_t ,静态初始化通过赋值PTHREAD_RWLOCK_INITIALIZER
这些处理程序就是发生在调用线程被取消或自愿终止的情况下,push的function参数是调用线程被取消时所调用的函数的地址,arg为参数;pop总是删除栈顶的函数,而且若execute不为0,那就调用该函数。
读写锁是在单个进程内的线程间共享时,变量在那个进程中;当读写锁在共享某个内存区的进程间共享时,它要指定PTHREAD_PROCESS_SHARED属性,且该变量应该在共享内存区中。
#include <pthread.h> int pthread_rwlock_init(pthread_rwlock_t *rwptr, const pthread_rwlockattr_t *attr); // return 0/errno int pthread_rwlock_destroy(pthread_rwlock_t *rwptr); // return 0/errno int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr); // return 0/errno, if written, blocked int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr); // return 0/errno, if read, blocked int pthread_rwlock_unlock(pthread_rwlock_t *rwptr); // return 0/errno int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr); // return 0/errno, if written, return EBUSY int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr); // return 0/errno, if read, return EBUSY int pthread_rwlockattr_init(pthread_rwlockattr_t *attr); // return 0/errno int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr); // return 0/errno int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *valptr); // return 0/errno int 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下GPIO驱动详解文章
- Linux下编译fortran程序_基本菜鸟版
- uboot环境变量与内核MTD分区关系
- 同步文件备份工具 Super Flexible File Synchronizer Pro v4
- ASP.NET之自定义同步HTTP处理程序(图文教程)
- MSSQL自动同步设置方法
- mysql同步复制搭建方法指南详细步骤
- mysql 触发器实现两个表的数据同步
- 实现两台MySQL数据库数据的同步的方法
- 如何做到多笔资料的同步
- MySQL主从服务器配置方法及注意事项
- Java之线程安全的简单理解
- 也谈PostgreSQL的同步配置(Slony)
- rsync+inotify文件变动后自动同步程序
- IOS同步请求和异步请求的区别
- 蒙牛供应链系统数据库同步灾备软件项目
- 同步与异步传输的区别
- EventWaitHandle
- Java深度历险(三)——Java线程:基本概念、可见性与同步
- PDA与PC基于Socket的同步