并发和竞态(理论篇)
来源:互联网 发布:电视机选择 知乎 编辑:程序博客网 时间:2024/05/22 00:08
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)
- 服务器SQL上的MSDTC不可用解决办法
- java集合操作-----求两个集合的交集和并集
- 对Java日期类型的相关操作总结
- Class.create和 Object.extend继承操作
- ajaxpro返回值类型总结-DataSet
- 并发和竞态(理论篇)
- 剖析ADSL速度之谜
- Eclipse + MinGW + Qt开发环境设置
- linux之cp/scp命令
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- Delphi QuotedStr函数的原型
- C++实现回文
- ajaxpro综合示例-ajaxpro无刷新更新gridview数据
- DX学习笔记