临界区(线程加锁操作)_第1页
临界区(线程加锁操作)_第2页
临界区(线程加锁操作)_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档名称文档密级 2020 4 2华为机密 未经许可不得扩散第 1 页 共 3 页 1 临界区临界区 不论是硬件临界资源 还是软件临界资源 多个进程必须互斥地对它进行访问 每 个进程中访问临界资源的那段代码称为临界区 Critical Section 每个进程中访问临界资源的那段程序称为临界区 Critical Section 临界资 源是一次仅允许一个进程使用的共享资源 每次只准许一个进程进入临界区 进入后 不允许其他进程进入 不论是硬件临界资源 还是软件临界资源 多个进程必须互斥地 对它进行访问 多个进程中涉及到同一个临界资源的临界区称为相关临界区 进程进入临界区的调度原则是 如果有若干进程要求进入空闲的临界区 一 次仅允许一个进程进入 任何时候 处于临界区内的进程不可多于一个 如已有进 程进入自己的临界区 则其它所有试图进入临界区的进程必须等待 进入临界区的 进程要在有限时间内退出 以便其它进程能及时进入自己的临界区 如果进程不能 进入自己的临界区 则应让出CPU 避免进程出现 忙等 现象 如果有多个线程试图同时访问临界区 那么在有一个线程进入后其他所有试图访问 此临界区的线程将被挂起 并一直持续到进入临界区的线程离开 临界区在被释放后 其他线程可以继续抢占 并以此达到用原子方式操作共享资源的目的 临界区在使用时以 CRITICAL SECTION 结构对象保护共享资源 并分别用Ent erCriticalSection 和 LeaveCriticalSection 函数去标识和释放一个临界区 所 用到的 CRITICAL SECTION 结构对象必须经过 InitializeCriticalSection 的初始 化后才能使用 而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临 界区的保护之下 否则临界区将不会起到应有的作用 共享资源依然有被破坏的可能 下面通过一段代码展示了临界区在保护多线程访问的共享资源中的作用 通过两个 线程来分别对全局变量 g cArray 10 进行写入操作 用临界区结构对象g cs 来保持 线程的同步 并在开启线程前对其进行初始化 为了使实验效果更加明显 体现出临界 区的作用 在线程函数对共享资源g cArray 10 的写入时 以 Sleep 函数延迟 1 毫秒 使其他线程同其抢占 CPU 的可能性增大 如果不使用临界区对其进行保护 则共享资源数据将被破坏 参见图1 a 所示计算结果 而使用临界区对线程保持 同步后则可以得到正确的结果 参见图1 b 所示计算结果 代码实现清单附下 临界区结构对象 CRITICAL SECTION g cs 共享资源 char g cArray 10 UINT ThreadProc10 LPVOID pParam 进入临界区 EnterCriticalSection 对共享资源进行写入操作 文档名称文档密级 2020 4 2华为机密 未经许可不得扩散第 2 页 共 3 页 for int i 0 i 10 i g cArray a Sleep 1 离开临界区 LeaveCriticalSection return 0 UINT ThreadProc11 LPVOID pParam 进入临界区 EnterCriticalSection 对共享资源进行写入操作 for int i 0 i 10 i g cArray 10 i 1 b Sleep 1 离开临界区 LeaveCriticalSection return 0 void CSample08View OnCriticalSection 初始化临界区 InitializeCriticalSection 启动线程 AfxBeginThread ThreadProc10 NULL AfxBeginThread ThreadProc11 NULL 等待计算完毕 Sleep 300 报告计算结果 CString sResult CString g cArray AfxMessageBox sResult 文档名称文档密级 2020 4 2华为机密 未经许可不得扩散第 3 页 共 3 页 在使用临界区时 一般不允许其运行时间过长 只要进入临界区的线程还没有离开 其他所有试图进入此临界区的线程都会被挂起而进入到等待状态 并会在一定程度上 影响程序的运行性能 尤其需要注意的是不要将等待用户输入或是其他一些外界干预的 操作包含到临界区 如果进入了临界区却一直没有释放 同样也会引起其他线程的长时 间等待 换句话说 在执行了EnterCriticalSection 语句进入临界区后无论发生什 么 必须确保与之匹配的LeaveCriticalSec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论