⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16.2.1 相关的 api函数.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
16.2.1 相关的 API函数
关键代码段非常类似于我们平常使用的公用电话亭,当我们想要进入公用电话亭使用电话这种资源
时,首先需要判断电话亭里是否有人,如果有人正在里面使用电话,那么我们只能在电话亭外等待:
当那个人使用完电话,井离开电话亭后,我们才能进入电话亭使用电话这种资源。同样地,当我们
使用完电话后,也要离开电话亭。关键代码段的机制与此类似。就好像我们要进入电话亭使用电话
这一资源时,首先需要建立一个电话亭一样,在进入关键代码段之前,首先需要初始化一个这样的
关键代码段,这可以调用 lnitializeCriticalSection函数实现,该函数的原型声明如下所示: 
voidInitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection); 
该函数有一个参数,是一个指向 CRITICAL_SECTION结构体的指针。该参数是 out类型,即作为返回
值使用的。因此,在使用时,需要构造一个 CRITICAL_SECTION结构体类型的对象,然后将该对象的
地址传递给InitializeCriticalSection函数,系统自动维护该对象,我们不需要了解或访问该结构
体对象内部的成员。
当有了一个公用电话亭,并且我们想要进入该电话亭去使用电话时,首先需要判断里面是否已经有
人了,如果没有人,我们才能进去。同样,如果想要进入关键代码段,首先需要调用 
EnterCriticalSection函数,以获得指定的临界区对象的所有权。该函数等待指定的临界区对象的
所有权,如果该所有权赋予了调用线程,则该函数就返回:否则该函数会一直等待,从而导致线程等
待。
当调用线程获得了指定的临界区对象的所有权后,该线程就进入关键代码段,对所保护的资源进行
访问。就好像公用电话亭没人时,我们就可以进去使用电话这种资源一样。当使用完电话之后,我
们就会离开公用电话亭。同样,线程使用完所保护的资源的之后,需要调用LeaveCriticalSection
函数,释放指定的临界区对象的所有权,之后,其他想要获得该临界区对象所有权的线程就可以获
得该所有权,从而进入关键代码段,访问保护的资源。
在日常生活中,当不再需要某个公用电话亭时,就会将其拆除掉。同样,对临界区对象来说,当不
再需要时,需要调用 DeleteCriticalSection函数释放该对象,该函数将释放一个没有被任何线程
所拥有的临界区对象的所有资源。
以上就是利用关键段实现线程同步需要调用的四个函数,以及调用步骤。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -