并行计算
假设有一个买票程序
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);
}