美文网首页程序员
MFC中利用关键代码段多线程同步互斥

MFC中利用关键代码段多线程同步互斥

作者: 李海游 | 来源:发表于2020-05-03 21:09 被阅读0次

关键代码段,也称为临界区,工作在用户方式下。它是指一个小代码段,在代码能执行前,它必须独占对某些资源的访问权。

在 MFC 中使用
  1. 在头文件中首先构造一个 CRTICAL_SECTION 类型的结构体 g_cs,并用 extern 关键字声明;进而在源文件中定义。
  2. 在类的构造函数中,调用 InitializeCriticalSection(&g_cs); 创建临界区对象代码段。
  3. 在类的析构函数中,调用 DeleteCriticalSection(&g_cs); 销毁临界区对象代码段。
  4. 在所需保护的代码前面调用 EnterCriticalSection(&g_cs); 获取临界区对象拥有权,如果获取到,则执行下面的代码,否则线程在这里一直等待。
    5.在程序访问完保护的代码后,调用 LeaveCriticalSection(&g_cs); 释放临界区对象拥有权,这时其他线程才可以进入步骤4。
注意事项

由于是在类的构造和析构函数中创建和销毁临界区对象,所以创建该类对象时,就激活关键代码段判断;而该类对象销毁时,比如在某个函数内部声明该类对象,那么这个函数结束时,该类对象也就销毁了,这时关键代码段也失效,如果线程执行时还遇到 EnterCriticalSection(&g_cs); 就会发生错误。

用例之一
函数B需要对 函数A中的执行结果进行处理,这时需要A执行完成,B在继续处理,周而反复。
void A()
{
    EnterCriticalSection(&g_cs);
    //需执行的代码
    LeaveCriticalSection(&g_cs);
}
void B()
{
    EnterCriticalSection(&g_cs);
    //对A执行的代码做处理
    LeaveCriticalSection(&g_cs);
}

相关文章

网友评论

    本文标题:MFC中利用关键代码段多线程同步互斥

    本文链接:https://www.haomeiwen.com/subject/jhqjghtx.html