编程范式16 笔记 信号量
来源:互联网 发布:小怪兽 知乎 编辑:程序博客网 时间:2024/06/08 09:25
void SellTickets(int i,int TicketsToSell,int numTickets,Samephore lock){ while(True){ /*临界区开始*/ SamephoreWait(lock); (*numTickets)--; SamephoreSignal(lock); /*临界区结束*/ printf("all done\n"); }}
信号量要大于0
假设有两个线程都卖出票,那么写回会出问题
http 并行化
char buffer[8];int main(){ ITP(false);//init thread package ThreadNew("writer",writer,0); ThreadNew("Reader",Reader,0); RunAllThread();}void writer(){ for(int i=0;i<40;i++){ char=PrepareRondomChar(); buffer[i%8]=c; }}void Reader(){ for(int i=0;i<40;i++){ char c=buffer[i%8]; ProcessChar(c); }}
要保证reader比writer慢
但是buffer有限
writer又不能快太多
char buffer[8];Samphore emptyBuffers 8;//Samphore emptyBuffers 4 自由度降低 正确性不影响//Samphore emptyBuffers 0 死锁Samphore fullBuffers 0;//Samphore fullBuffers 1;出错 Reader可能领先int main(){ ITP(false);//init thread package ThreadNew("writer",writer,0); ThreadNew("Reader",Reader,0); RunAllThread();}void writer(){ for(int i=0;i<40;i++){ SamphoreWait(emptyBuffers); char=PrepareRondomChar(); SamphoreSignal(fullBuffers); buffer[i%8]=c; }}void Reader(){ for(int i=0;i<40;i++){ SamphoreWait(fullBuffers); char c=buffer[i%8]; SamphoreSignal(emptyBuffers); ProcessChar(c); }}
哲学家吃饭
Samaphore forks[]={1,1,1,1,1}Semaphore numOfForkToEat(4);Semaphore void philosopter(int id){ for(int i=0;i<3;i++){ sw(forks[i]); sw(forks[(i+1)%5]; Eat; ss(forks[i]); ss(forks[(i+1)%5]);
阅读全文
0 0
- 编程范式16 笔记 信号量
- 编程范式学习笔记
- 《编程范式》学习笔记
- 编程范式2 笔记
- 编程范式11 笔记
- 编程范式13 笔记
- 编程范式14 笔记
- 编程范式23 笔记
- Programming Paradigms 编程范式-笔记
- 编程范式5 笔记 泛型
- 编程范式七 笔记 泛型栈
- 编程范式16
- 编程范式随课笔记(一)
- 编程范式随课笔记(二)
- 编程范式3 笔记 struct 内存模型
- 编程范式8 笔记 C/C++内存
- 编程范式9 笔记 伪汇编语言
- 编程范式 10 笔记 函数栈帧
- 斐波那契数列应用在字符串分割组合上的算法题
- 配置PropertiesEditor插件 jp.gr.java_conf.ussiy.app.propedit_5.3.3
- 自动创建docker容器脚本
- linux select 多路复用机制
- 代码干货 | Python高性能计算库——Numba
- 编程范式16 笔记 信号量
- MySQL安装图解设置详细教程
- wpf命令详解
- 'find' and 'locate' in linux to look up files
- SQL中的case when then else end用法
- 总结
- Maven命令及生命周期
- [MYSQL -20]更新和删除数据
- 全局变量、static全局变量、全局常量使用方法