编程范式 17 笔记 并行化

来源:互联网 发布:淘宝3c认证可以租吗 编辑:程序博客网 时间:2024/06/07 02:25

哲学家吃饭

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);}
原创粉丝点击