linux io 学习笔记(01)---锁,信号量
1.采用信号量访问:当有段临界代码,需要保证排他的访问一个资源。
2.sudo dmesg -c 消除dmesg缓冲
3.互斥锁:代表的是一种锁资源,互斥锁的工作原理是:保证对共享资源操作的原子性
4.自旋锁:轮循
5.读写锁:奇偶
6.顺序锁:读写可并发,但是会检测信号
互斥锁中:
死锁:(1)互斥锁交叉嵌套
(2)同一个互斥锁嵌套使用
(3)占有锁资源的任务被异常退出,锁资源不会释放,比如,一个线程开了一个锁,还没来得及解锁,线程就被取消了。
避免死锁:申请锁,按顺序加锁,以防死锁。
7,锁和信号量不一样,比如要顺序执行时。
1).初始化互斥锁
函数原型: int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
功能: 初始化互斥锁
参数: mutex 互斥锁的标识符
attr 互斥锁的属性 NULL
返回值: 成功:0
失败 :错误码
2):执行上锁:
函数原型:int pthread_mutex_lock(pthread_mutex_t *mutex);
功能: 执行上锁操作
参数: mutex 互斥锁的标识符
返回值: 成功 0
失败:错误码
3):执行解锁
函数原型: int pthread_mutex_unlock(pthread_mutex_t *mutex);
功能:执行解锁操作
参数: mutex 互斥锁的标识符
返回值:成功 0 ;失败:错误码;
4):释放锁资源:
函数原型:int pthread_mutex_destroy(pthread_mutex_t *mutex);
功能: 摧毁锁资源
参数: mutex互斥锁的标识符
返回值: 成功0
失败:错误码
信号量:
申请信号量:p操作 -1
释放信号量:v操作 +1
当执行任务,申请信号量时,如果当前信号量的值大于0,申请成功,信号量减一,不大于0 则申请失败。会阻塞。
1)初始化信号量的值
int sem_init(sem_t *sem, int pshread,unsigned int value);
功能: 初始化信号量
参数:sem 信号量的标识符
pashred 0 用于线程间
非0 用于进程间
value 信号量的初始值
返回值: 成功 0
失败 -1
2)申请信号量
int sem_wait(sem_t *sem);
功能:申请信号量,信号量的值-1;
参数:sem 信号量的标识符
返回值:成功 0
失败 -1
3)释放信号量
int sem_post(sem_t *sem);
功能:释放信号量 信号量的值+1;
参数:sem 信号量的标识符
返回值 成功 0
失败 -1
4)摧毁信号量
int sem_destroy(sem_t *sem);
参数: sem 信号量的标识符
返回值: 成功 0
失败 -1
5)获取当前信号量的值
int sem_getvalue(sem_t *sem,int *sval);
参数: sem:信号量的标识符
sval 保存当前信号量的值。
linux io 学习笔记(01)---锁,信号量的更多相关文章
- Linux Basic学习笔记01
介绍课程: 中级: 初级:系统基础 中级:系统管理.服务安全及服务管理.Shell脚本: 高级: MySQL数据库: cache & storage 集群: Cluster lb: 4laye ...
- linux io 学习笔记(02)---条件变量,管道,信号
条件变量的工作原理:对当前不访问共享资源的任务,直接执行睡眠处理,如果此时需要某个任务访问资源,直接将该任务唤醒.条件变量类似异步通信,操作的核心:睡眠.唤醒. 1.pthread_cond_t 定 ...
- linux c学习笔记----互斥锁属性
转自:http://lobert.iteye.com/blog/1762844 互斥锁属性 使用互斥锁(互斥)可以使线程按顺序执行.通常,互斥锁通过确保一次只有一个线程执行代码的临界段来同步多个线程. ...
- linux io 学习笔记(03)---共享内存,信号灯,消息队列
system V IPC 1)消息队列 2)共享内存 3)信号灯(信号量集) 1.消息队列. ipcs -q 查看系统中使用消息队列的情况 ipcrm -q +msqid 删除消息队列 消息队列工作原 ...
- linux shell 学习笔记01
1.命令历史记录history !$ :调用上一条命令的执行结果 !100 :运行history记录里的第100条命令 !ser :调用以ser开头的最后一次执行的命令 ctrl+r ...
- linux kernel学习笔记-5内存管理_转
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- Java IO学习笔记一
Java IO学习笔记一 File File是文件和目录路径名的抽象表示形式,总的来说就是java创建删除文件目录的一个类库,但是作用不仅仅于此,详细见官方文档 构造函数 File(File pare ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
随机推荐
- 【Hibernate那点事儿】—— Hibernate应该了解的知识
前言: 最近由于有点时间,就像深入的学习一下Hibernate.之前只是简单的使用,并没领会它的妙处.这里就趁着分享的机会,好好整理一下. 这篇主要讲到了下面几个部分: Hibernate框架 Hib ...
- POJ 1503 大整数
之前做的大整数,都是一位一位操作. 优化方案:压缩方案. 模板: + - * 操作符重载 #include<cstdio> #include<iostream> #inclu ...
- 【[SCOI2012]喵星球上的点名】
好题啊 \(SA+ST\text{表}+\text{莫队}\) 我们先强行把所有的串连起来,串与串之间插入特殊字符,姓和名之间也插入特殊字符 之后跑一遍\(SA\),求出\(sa\)和\(het\) ...
- 【[Violet]樱花】
就是化柿子 我们求 \[\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\] 的正整数解的个数 喜闻乐见的化柿子了 \[\frac{x+y}{xy}=\frac{1}{n!}\ ...
- POJ 3185 The Water Bowls 【一维开关问题 高斯消元】
任意门:http://poj.org/problem?id=3185 The Water Bowls Time Limit: 1000MS Memory Limit: 65536K Total S ...
- eclipce导出项目发布到tomcat
1.右击项目-Except 2.在弹出框中输入“WAR file” 3.点击“next” 在Destinatin选择保存路径,即可 4.将保存的文件复制到tomcat下,启动tomcat之后,会自动解 ...
- 【luogu P2341 [HAOI2006]受欢迎的牛】 题解
题解报告:https://www.luogu.org/problemnew/show/P2341 我们把图中的强连通分量缩点,然后只有出度为0的牛是受欢迎的,这样如果出度为0的牛只有一个,说明受所有牛 ...
- HTML5之canvas基本API介绍及应用 1
一.canvas的API: 1.颜色.样式和阴影: 2.线条样式属性和方法: 3.路径方法: 4.转换方法: 5.文本属性和方法: 6.像素操作方法和属性: 7.其他: drawImage:向画布上绘 ...
- 使用带有对象的data-ng-bind
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Consul vs Zookeeper vs Etcd vs Eureka
为什么不应该使用ZooKeeper做服务发现 Eureka 更好 ,etcd作为一个受到Zookeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更具有以下4个特点{![引自Dock ...