线程同步总结

线程同步总结

ID:30357036

大小:17.64 KB

页数:7页

时间:2018-12-29

线程同步总结_第1页
线程同步总结_第2页
线程同步总结_第3页
线程同步总结_第4页
线程同步总结_第5页
资源描述:

《线程同步总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划线程同步总结  注:多进程时所主要解决的就是进程同步问题。  1.进程同步:  进程同步的主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。  进程同步存在的问题:  一、两种形式的制约关系  1.间接相互制约关系(存在临界资源需要互斥)  2.直接相互制约关系(进程存在前后执行顺序)  二、产生死锁  1.产生死锁的原因  (1)竞争资源 

2、 (2)进程间推进顺序非法  2.产生死锁的必要条件  (1)互斥条件(不可预防)  (2)请求和保持条件(可预防)  (3)不剥夺条件(可预防)  (4)环路等待条件(可预防)  3.死锁的类型  (1)嵌套型(即便一个临界资源也会发生死锁)目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划  (2)AB-BA  (3)有待完善!  解决的方

3、法:  一、数据结构:  信号量:(实现互斥例:APUE中的记录锁XSIIPC的信号量)  1.整型信号量  2.记录型信号量  3.AND型信号量  4.信号量集  二、算法:  实现同步:  生产者—消费者问题:  哲学家进餐问题  读者—写者问题  解决死锁:(1)预防死锁:破坏产生死锁的必要条件(2)避免死锁:利用算法防止进入不安全状态(银行家算法)(3)检测死锁:产生死锁后采取适当措施(4)解除死锁:产生死锁后撤销挂起某些进程  一个经典的多线程同步问题  程序描述:目的-通过该培训员工可对保安行业有初步了解,并感受到

4、安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划  主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数->sleep(50)->全局变量++->sleep(0)->输出参数和全局变量。要求:  1.子线程输出的线程序号不能重复。  2.全局变量的输出必须递增。  下面画了个简单的示意图:  分析下这个问题的考察点,主要考察点有二个:  1.主线程创建子线程并

5、传入一个指向变量地址的指针作参数,由于线程启动须要花费一定的时间,所以在子线程根据这个指针访问并保存数据前,主线程应等待子线程保存完毕后才能改动该参数并启动下一个线程。这涉及到主线程与子线程之间的同步。  2.子线程之间会互斥的改动和输出全局变量。要求全局变量的输出必须递增。这涉及到各子线程间的互斥。  下面列出这个程序的基本框架,可以在此代码基础上进行修改和验证。  //经典线程同步互斥问题  #include  #include  #include  longg_nNum;//全局资源  unsignedint__stdca

6、llFun(void*pPM);//线程函数  constintTHREAD_NUM=10;//子线程个数  intmain()目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划  {  g_nNum=0;  }  HANDLEhandle[THREAD_NUM];inti=0;while(i线程同步总结)Sleep(0);//somework

7、shouldtodoprintf("线程编号为%d全局资源值为%d",nThreadNum,g_nNum);return0;  可以看出,运行结果完全是混乱和不可预知的。运用Windows平台下各种手段包括关键段,事件,互斥量,信号量等等来解决这个问题。  关键段CRITICAL_SECTION  首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。  关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。  函数功能:初始化  函数原型:  voidInit

8、ializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);函数说明:定义关键段变量后必须先初始化。  函数功能:销毁  函数原型:目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。