为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 4[1].3.2 临界段[集成]

4[1].3.2 临界段[集成]

2018-03-21 3页 doc 14KB 6阅读

用户头像

is_842972

暂无简介

举报
4[1].3.2 临界段[集成]4[1].3.2 临界段[集成] 4[1].3.2+临界段 本文由leismile_sun贡献 pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 4.3.2 临界段 4.3.2.1 临界段的基本概念 当必须以原子操作方式来修改单个值时, 互锁函数家族是相当有用的, 但是大多数实际工作 中的编程问题要解决的是比单个 32 位或 64 位值复杂得多的数据结构。 为了以原子操作方式 使用更加复杂的数据结构, 必须使用 Windows 提供的其它的某些特性, 临界段就是其中之一。 临界段也...
4[1].3.2 临界段[集成]
4[1].3.2 临界段[集成] 4[1].3.2+临界段 本文由leismile_sun贡献 pdf文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 4.3.2 临界段 4.3.2.1 临界段的基本概念 当必须以原子操作方式来修改单个值时, 互锁函数家族是相当有用的, 但是大多数实际工作 中的编程问题要解决的是比单个 32 位或 64 位值复杂得多的数据结构。 为了以原子操作方式 使用更加复杂的数据结构, 必须使用 Windows 提供的其它的某些特性, 临界段就是其中之一。 临界段也称作关键代码段,它是指一个小代码段,在它能够执行前,它必须独占对某些共享 资源的访问权。一旦线程执行进入了临界段,就意味着它获得了这些共享资源的访问权,那 么在该线程处于临界段内的期间, 其它同样需要独占这些共享资源的线程就必须等待, 直到 获得资源的线程离开临界段而释放资源。 这是让若干行代码能够以原子操作方式来使用资源 的一种方法。当然,系统仍然能够抑制进入临界段的线程的运行,而抢先安排其它不需要独 占这些共享资源的线程运行。 4.3.2.2 Win32 API 中的临界段相关函数 有 4 个函数用于临界段。要使用这些函数,你必须定义一个临界段对象,这是一个类型为 CRITICAL_SECTION 的实例,通常为全局变量,这样可以方便多个线程对其的引用,例如: CRITICAL_SECTION cs; 这个 CRITICAL_SECTION 数据类型是一个结构,但是其中的字段只能由 Windows 内部使用。 这个临界段对象必须首先被程序中的某个线程初始化,通过调用: InitializeCriticalSection(&cs); 这样就创建了一个名为 cs 的临界段对象。 当临界段对象被初始化之后,线程可以通过下面的调用进入临界段: EnterCriticalSection(&cs); 在这时,线程被认为“拥有”临界段对象。没有两个线程可以同时拥有相同的临界段对象, 因此,如果一个线程进入了临界段,那么下一个使用同一个临界段对象调用 EnterCriticalSection 的线程将被迫等待,直到第一个线程通过下 面的调用离开临界段: LeaveCriticalSection(&cs); 这时,在 EnterCriticalSection 中等待的一个线程将拥有临界段,进而允许 继续执行。当 临界段不再被程序所需要时,可以通过调用 DeleteCriticalSection(&cs); 将其删除,该函数释放所有被分配来 维护此临界段对象的系统资源。 根据需要,你可以定义多个临界段 对象,比如 cs1 和 cs2。例如,如果一个程序有 4 个线程, 而前两个线程共享一些数据, 那么它们可以使用一个临界段对 象, 而两外两个线程共享一些 其它的数据,那么它们可以使用另一 个临界段对象。总的来讲,应该为每个共享资源使用一 个 CRITICAL_SECTION 变量。 4.3.2.3 临界段的应用举例 读者可以先运行以下的程序 代码 4.4 #include "windows.h" #include using namespace std; DWORD WINAPI ThreadFunc1(PVOID pvParam) { for(int i = 1; i <= 100; i++) { cout<<"Thread1 output: "< using namespace std; CRITICAL_SECTION cs; DWORD WINAPI ThreadFunc1(PVOID pvParam) { for(int i = 1; i <= 100; i++) { EnterCriticalSection(&cs); cout<<"Thread1 output: "<
/
本文档为【4[1]&#46;3&#46;2 临界段[集成]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索