幼儿公园

电脑杂谈  发布时间:2020-03-22 09:13:45  来源:网络整理

ccriticalsection用法_ccriticalsection 使用_ccriticalsection使用

当多个线程访问排他的共享资源时,可以使用“关键部分”对象. 在任何时候ccriticalsection使用,只有一个线程可以拥有关键部分对象. 拥有关键部分的线程可以访问受保护的资源或代码段. 希望进入关键部分的其他线程将被挂起并等待,直到拥有关键部分的线程放弃了关键部分. 到目前为止,这保证了多个线程不会同时访问共享资源.

CCriticalSection类的用法非常简单,步骤如下:

ccriticalsection使用_ccriticalsection 使用_ccriticalsection用法

定义CCriticalSection类的全局对象(以便所有线程都可以访问它),

例如CCriticalSectioncritical_section;

ccriticalsection用法_ccriticalsection 使用_ccriticalsection使用

在访问需要保护的资源或代码之前ccriticalsection使用,请调用CCriticalSection类Lock()的成员以获取关键节对象:

critical_section.Lock();

ccriticalsection使用_ccriticalsection 使用_ccriticalsection用法

程中调用此函数以获取其请求的关键部分. 如果此时没有其他线程占用关键部分对象,则调用Lock()的线程将获取关键部分;否则,该线程将获取关键部分. 否则,线程将被挂起并放入系统队列,以等待直到当前拥有关键节的线程释放关键节. 直到时区.

访问关键部分后,使用CCriticalSection成员函数Unlock()释放关键部分:

ccriticalsection使用_ccriticalsection 使用_ccriticalsection用法

critical_section.Unlock();

更笼统地说,当线程A执行critical_section.Lock()时;语句,如果其他线程(B)正在执行critical_section.Lock();语句和critical_section之后. 开锁 ();在语句A之前,线程A将等到线程B完成Critical_section. 开锁 ();语句,线程A将继续执行.

我的理解如下: Lock()和unlock()之间使用的内存受到保护.

我们之前看到的两个示例. 一种是两个线程使用一个线程函数. 相同的变量在函数中分配了一个值. 锁定后,您需要等待.

一个是两个线程使用不同的线程函数. 这两个函数将值分配给相同的变量. 锁定后,您需要等待.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-148161-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...