UNPv2第八章:读写锁
来源:互联网 发布:理光软件研究所业务 编辑:程序博客网 时间:2024/06/02 10:31
1 获取和释放读写锁
pthread_rwlock_rdlock()用来获取读出锁,如果相应的读出锁已经被某个写入者占有,那么就阻塞调用线程。
pthread_rwlock_wrlock()用来获取一个写入锁,如果相应的写入锁已经被其它写入者或者一个或多个读出者占有,那么就阻塞该调用线程;
pthread_rwlock_unlock()用来释放一个读出或者写入锁。函数原型如下:
#include<pthread.h>int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr);int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr);int pthread_rwlock_unlock(pthread_rwlock_t *rwptr);
这三个函数若调用成功则返回0,失败就返回错误码。要注意的是其中获取锁的两个函数的操作都是阻塞操作,也就是说获取不到锁的话,那么调用线程不是立即返回,而是阻塞执行。有些情况下,这种阻塞式的获取所得方式可能不是很适用,所以,接下来引入两个采用非阻塞方式获取读写锁的函数pthread_rwlock_tryrdlock()和pthread_rwlock_trywrlock(),非阻塞方式下获取锁的时候,如果不能马上获取到,就会立即返回一个EBUSY错误,而不是把调用线程投入到睡眠等待。函数原型如下:
#include<pthread.h>int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwptr);int pthread_rwlock_trywrlock(pthread_rwlock_t *rwptr);同样地,这两个函数调用成功返回0,失败返回错误码。
2 线程取消
#include<pthread.h>int pthread_cancel(pthread_t thread);
发送终止信号给thread线程,如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。
0 0
- UNPv2第八章:读写锁
- UNPv2第二章:Posix IPC
- UNPv2第十章:Posix信号灯
- 第八章 读写文件 笔记
- UNPv2第三章:System V IPC
- UNPv2第四章:管道和FIFO
- UNPv2第五章:Posix消息队列
- UNPv2第六章:System V 消息队列
- UNPv2第七章:互斥锁与条件变量
- UNPv2第十一章:System V信号灯
- UNPv2第十二章:共享内存区
- UNPv2第十三章:Posix共享内存区
- 字符设备驱动第八课------读写锁
- Python课后习题-第八章 读写文件
- UNPv2第十四章:System V共享内存区
- unpv2-共享内存
- UNPv2第一章:简介
- 第八章
- 阿里百川 用户反馈(feedback) 与 (com.umeng.lib.xxxxx 及 和 alipaySDK-xxxxx) 冲突的问题。
- Git详解之二 Git基础
- select版的TCP通信
- continue VS break
- linux系统调用和库函数调用的区别
- UNPv2第八章:读写锁
- WebView开发中的常见问题
- SPI
- 蓝桥杯 埃及分数
- server 远程服务器登录及文件传输
- 搜索后再分页
- Apache Zeppelin使用入门指南:编程
- 输入一个字符串,打印出该字符串中字符的所有排列
- 如何用Powerdesigner的PDM生成数据库及逆向生成