并发和竞态(理论篇)
来源:互联网 发布:怎么在网络上推广产品 编辑:程序博客网 时间:2024/05/22 01:26
1. 信号量
信号量是为了解决共享资源问题而生的,通过著名的P/V操作可以获取和释放信号量,只有获得信号量的线程才可以访问共享资源,从而防止竞态的发生。
其中P操作有三种情况:
void down(struct semaphore *sem); // 如果信号量可以获得,信号量减一; 如果信号量不可以获得则阻塞进程并不可中断
int down_interruptible(struct semaphore *sem); // 如果信号量可以获得,信号量减一,函数返回零; 如果信号量不可以获得则阻塞进程但可以被中断,如果进程被中断,函数返回非零值
int down_trylock(struct semaphore *sem); // 如果信号量可以获得,函数返回零; 如果信号不可以获得,函数返回非零值
V操作只有一种情况:
void up(struct semaphore *sem); // 任何拿到信号量的线程都必须通过调用一次且仅有一次up函数来释放信号量
2. 读取者/写入者信号量
当共享资源可以被且仅被一个写入者访问,或者当共享资源可以被一个或多个读写者访问时,可以考虑使用这种特殊的信号量。
3. completion
当需要解决共享资源的同步访问问题时,可以考虑使用completion。
4. 自旋锁
"一个自旋锁是一个互斥设备,它只能有两个值:“锁定”和“解锁”"(LDD3 p119)
在不能阻塞代码中可以考虑使用自旋锁解决资源共享的问题。
5. 读取者/写入者自旋锁
类似于读取者/写入者信号量
- 并发和竞态(理论篇)
- 并发和竞态(理论篇)
- Java并发编程(理论篇 上)
- 并发和竞态(实践篇)
- 并发和竞态(实践篇)
- Java 并发编程:核心理论 (r)
- Java 并发编程:核心理论(转)
- 并发和竞态
- 并发和竞态
- 并发和竞态
- 并发和竞态
- 并发和竞态
- 并发和竞态
- 并发和竞态
- 竞态和并发
- 并发和竞态
- 并发和竞态
- 并发和竞态(1)
- Web开发者必备的20款超赞jQuery插件
- 2011年度最佳 jQuery 插件发布啦
- 分享30个最佳 jQuery Lightbox 效果插件
- 关于equa()l和hashCode()
- 分享35套很不错的抽象纹理背景素材
- 并发和竞态(理论篇)
- Delphi2010强化的反射(续)
- Delphi2010强化的反射
- HTML 5 标签、属性、事件及浏览器兼容性速查表
- 分享30个最新的单页网站设计案例
- 反射机制传递类_橙子的Delphi技术专区
- 学习HTML5十佳站点推荐
- 分享27款非常棒的 jQuery 表单插件
- 分享 35 套精美的 PSD 图标素材