哲学家吃饭
Samphore fork[]={1,1,1,1,1};
Samphore numAllToEat(2);
void Philosepher(int id)
{
for(int i=0;i<3;i++){
Think();
sw(numAllToEat);
sw(forks[id])
sw(forks[(id+1)%5]);
Eat();
ss(forks[id]);
ss(forks[(id+1)%5]);
}
Think();
}
FTP
int DownloadSingleFile(const char* server,const char* path)
{
}
int DownloadAllFiles(const char* server,const char* files[],int n)
//主线程产生很多子线程
{
int totalBytes=0;
Semaphore lock=1;
for(int i=0;i<n;i++)
{
ThreadNew(,DownloadHelper,4,server,files[i],&totalBytes,lock);
}
//等所有工作都完成才return
return totalBytes;
}
void DH(const char * server,const char * path, int *numBytesp, semaphore lock)
{
int bytesDownloaded=DownloadSingleFile(server,path);
sw(lock);
(*numBytesp)+=bytesDownloaded;
ss(lock);
}
监视每个子线程
知道它们是否任务完成
int DownloadSingleFile(const char* server,const char* path)
{
}
int DownloadAllFiles(const char* server,const char* files[],int n)
//主线程产生很多子线程
{
Semaphore childrenDone=0;
int totalBytes=0;
Semaphore lock=1;
for(int i=0;i<n;i++)
{
ThreadNew(,DownloadHelper,5,server,files[i],&totalBytes,lock,CD);
}
//等所有工作都完成才return
for(int i=0;i<n;i++) sw(childrenDone);
return totalBytes;
}
void DH(const char * server,const char * path, int *numBytesp, semaphore lock,semaphore parentToSignal)
{
int bytesDownloaded=DownloadSingleFile(server,path);
sw(lock);
(*numBytesp)+=bytesDownloaded;
ss(lock);
ss(parentToSignal);
}