预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共78页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

多核程序设计Multi-coreProgramming提纲1.多核、多处理器系统中的每颗处理器(每个核),同时间内可以执行各自不同的进程(或线程)。 2.一颗单线程能力的处理器(一个核)只能执行一个进程,双核处理器就能够同时执行两个不同的进程(或线程),四核就可以同时不同的四个进程(或线程)。 3.倘若是执行不支持多线程的程序,那么每颗处理器内的多线程功效就无从发挥。 4、硬件条件已经具备,但作为人机交互的操作系统和应用软件需要研究它的并行化方法,最大限度挖掘系统的整体性能。多核与多线程编程欲说线程,先从进程(Process)说起多线程的概念进程与线程的关系一个进程内的线程示例线程的状态多线程编程的问题多核与线程并行的关系线程的同步线程同步问题示例互斥和同步临界区(1)临界区(2)锁(互斥量)(1)锁(2)-示例锁(3)--互锁怎么办?信号量(semaphore)(1)信号量(2)—示例信号量(3)—示例事件(Event)(1)事件(2)—示例线程的本地存储(TLS)并行(多线程)程序设计方法串行程序并行化(多线程)一般流程Windows环境下的多线程编程Windows线程库介绍Windows线程库介绍使用win32线程API使用win32线程API—HANDLE使用win32线程API—HANDLE使用WIN32线程API—线程函数线程函数—CreateThread的参数线程的管理线程的等待和退出多线程基础—示例分析多线程基础—示例分析(方案一)WaitingforaThreadWaitingforManyThreadsExample:MultipleThreadsModifythepreviousexamplecodetoprintout •Appropriate“HelloThread”message •Uniquethreadnumber •Usefor-loopvariableofCreateThreadloop Sampleoutput: Example2:HelloThreadsHelloThreadsTimeline数据竞争(RaceConditions)HowtoAvoidDataRaces程序修改方案Solution–“Local”Storage多线程编程举例(示例一)intmain()//主函数 {inti=0; //Shouldbeaddinmaincodebody #ifdef__INTEL_COMPILER printf("__INTEL_COMPILER=%d\n",__INTEL_COMPILER); #else printf("__INTEL_COMPILERisnotdefined.\n"); #endif _beginthread(ThreadFunc1,0,NULL);// _beginthread(ThreadFunc2,0,NULL); Sleep(3000); cout<<"end"<<endl; return0; }#include<windows.h> #include<iostream> usingnamespacestd; DWORDWINAPIFunOne(LPVOIDparam) {while(true) { Sleep(1000); cout<<"hello!"; } return0; } DWORDWINAPIFunTwo(LPVOIDparam) {while(true) { Sleep(1000); cout<<"world!"; } return0; }intmain(intargc,char*argv[]) { intinput=0; HANDLEhand1= CreateThread(NULL,0,FunOne,(void*)&input,CREATE_SUSPENDED,NULL); HANDLEhand2= CreateThread(NULL,0,FunTwo,(void*)&input,CREATE_SUSPENDED,NULL); while(true){ cin>>input; if(input==1){ResumeThread(hand1);ResumeThread(hand2);} if(input==0){SuspendThread(hand1);SuspendThread(hand2);} if(input==2){return0;} }; TerminateThread(hand1,1); TerminateThread(hand2,1); return0;}#include"stdafx.h" #include<windows.h> #include<iostream> usingnamespace