编程范式15 笔记 并行化
来源:互联网 发布:odds ends相机数据 编辑:程序博客网 时间:2024/06/05 03:26
并行计算
假设有一个买票程序
int mian(){ int Agents=10; int Tickets=150; for(int i=1;i<=Agent;i++) { SellTicket(i,Agents,Tickets) }}
void SellTickets(int i,int TicketsToSell){ while(TicketsToSell>0){ printf("%d sell a ticket\n",i) TicketsToSell--; } printf("all done\n");}
并行化
int main(){ int Agents=10; int Tickets=150; InitThreadPackage(false); for(int i=1;i<=Agent;i++) { char name[32]; sprintf(name,"%d sell thread",i); ThreadNew(name,SellTickets,2,i,Tickets/Agent); } RunAllThreads(); return 0;}
void SellTickets(int i,int TicketsToSell){ while(TicketsToSell>0){ printf("%d sell a ticket\n",i) TicketsToSell--; if(RandomChance(0.1)) ThreadSleep(1000); //0.1的概率暂停占用CPU //不然还是按照顺序卖 } printf("all done\n");}
使用指针共享临界区
int main(){ int Agents=10; int Tickets=150; InitThreadPackage(false); for(int i=1;i<=Agent;i++) { char name[32]; sprintf(name,"%d sell thread",i); ThreadNew(name,SellTickets,2,i,&Tickets/Agent); } RunAllThreads(); return 0;}
void SellTickets(int i,int *TicketsToSell){ while(*TicketsToSell>0){ printf("%d sell a ticket\n",i) *TicketsToSell--; } printf("all done\n");}
信号量
int main(){ int Agents=10; int Tickets=150; Sempahore lock=SemaphoreNow(,1); InitThreadPackage(false); for(int i=1;i<=Agent;i++) { char name[32]; sprintf(name,"%d sell thread",i); ThreadNew(name,SellTickets,2,i,&Tickets/Agent,lock); } RunAllThreads(); return 0;}
void SellTickets(int i,int *TicketsToSell){ while(true) { SemaphoreWait(lock); if(*TicketsToSell==0) break;` printf("%d sell a ticket\n",i) *TicketsToSell--; SemaphoreSignal(lock); } SemaphoreSignal(lock);}
阅读全文
0 0
- 编程范式15 笔记 并行化
- 编程范式 17 笔记 并行化
- 编程范式学习笔记
- 《编程范式》学习笔记
- 编程范式2 笔记
- 编程范式11 笔记
- 编程范式13 笔记
- 编程范式14 笔记
- 编程范式23 笔记
- Programming Paradigms 编程范式-笔记
- 编程范式5 笔记 泛型
- 编程范式七 笔记 泛型栈
- 编程范式16 笔记 信号量
- gpu并行编程简略笔记
- 编程范式随课笔记(一)
- 编程范式随课笔记(二)
- 编程范式3 笔记 struct 内存模型
- 编程范式8 笔记 C/C++内存
- Java入门之IO流(输入流和输出流)
- CSS3选择器、边框、阴影
- 制作卡通材质
- C++ STL 学习一vector
- C#中的表达式树的浅解
- 编程范式15 笔记 并行化
- 常用数学专业名词
- Virtualbox 共享文件夹
- python基础第七篇
- 136. Single Number
- HTML5 Canvas绘图
- Vijos P1680-类LCS&&好好学着点-距离
- 二项分布(Binomial Distribution)
- Java书单