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

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

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

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

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
没人觉得
而不是大陆