临界段CCriticalSection的使用[通俗易懂]

临界段CCriticalSection的使用[通俗易懂]类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区。临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用。比如,在链表中添加�一个结点就仅仅同意一次一个线程进行。通过使用CCriticalSection对象来控制链表,就能够达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了执行线程的权力,而把其…

大家好,又见面了,我是你们的朋友全栈君。

CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻仅仅同意一个线程存取资源或代码区。临界区在控制一次仅仅有一个线程改动数据或其他的控制资源时很实用。比如,在链表中添加�一个结点就仅仅同意一次一个线程进行。通过使用CCriticalSection对象来控制链表,就能够达到这个目的。它就像是一把钥匙,哪个线程获得了它就获得了执行线程的权力,而把其他线程统统堵塞。
CCriticalSection类的构造函数原型例如以下:

CCriticalSection() 

能够发现这个类的构造函数没有參数,所以创建一个CCriticalSection类的对象很easy,仅仅有例如以下就可以:

CCriticalSection criticalSection; 

演示样例:使用临界段编写一个有两个线程的应用程序。
1.创建单文档应用程序;
2.在视图类的实现文件里定义一个临界段对象:

CCriticalSection criticalSection; 

3.在视图类的实现文件里定义两个线程函数:

UINT MessageThread1(LPVOID pParam) 



    criticalSection.Lock(); 

    LPTSTR pMessage = _T(
“Thread1 is started”); 

    CWnd *pMainWnd = AfxGetMainWnd(); 

    ::MessageBox(pMainWnd->m_hWnd, pMessage, _T(
“Thread message”), MB_OK); 

    criticalSection.Unlock(); 

    
return 
0



UINT MessageThread2(LPVOID pParam) 



    criticalSection.Lock(); 

    LPTSTR pMessage = _T(
“Thread2 is started”); 

    CWnd *pMainWnd = AfxGetMainWnd(); 

    ::MessageBox(pMainWnd->m_hWnd, pMessage, _T(
“Thread message”), MB_OK); 

    criticalSection.Unlock(); 

    
return 
0



4.在视图类鼠标左键消息函数编写例如以下:

void CThreadTestView::OnLButtonDown(UINT nFlags, CPoint point) 



    AfxBeginThread(MessageThread1, _T(
“Thread is started”)); 
//启动线程1 

    AfxBeginThread(MessageThread2, _T(
“Thread is started”)); 
//启动线程2 

    CView::OnLButtonDown(nFlags, point); 



执行结果例如以下:

临界段CCriticalSection的使用[通俗易懂]

參考资料:
1.临界段类(CCriticalSection)——MFC http://blog.sina.com.cn/s/blog_627ebfc30100itd9.html
2.《MFC Windows应用程序设计(第2版)》

转载于:https://www.cnblogs.com/hrhguanli/p/4004463.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162056.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月20日 下午4:46
下一篇 2022年7月20日 下午5:00


相关推荐

  • 网站地图怎么做?dedecms网站地图制作方法听语音

    网站地图怎么做?dedecms网站地图制作方法听语音

    2021年9月23日
    42
  • iptables如何删除一条规则

    iptables如何删除一条规则

    2021年6月3日
    135
  • 调试coredump步骤(coredump原理)

    linux系统中某个进程突然崩溃终止,该从哪方面入手分析问题?

    2022年4月12日
    483
  • 马拉车算法详解, C++代码实现

    马拉车算法详解, C++代码实现算法介绍马拉车算法是用来在一个字符串中寻找最长回文串 正着读和反着读都相同的字符串 的一种算法 该算法运用了动态规划的思想 将寻找最长回文串算法的时间复杂度降低到了线性 算法原理对于一个字符串要判断它是否为回文串要分为字符串长度为奇数或者偶数两种情况 为了简化做法 我们进行如下的操作 在字符串的两端和每两个字符中间添加一个 或者任意一个一定不会在字符串中出现的字符 通常就是 啦 再在字符串的开始和结尾放置字符串开始和结束的标识符 上述操作后拓展出来的字符串的长度一定是奇数

    2025年6月6日
    2
  • 数据库的唯一索引_数据库唯一索引是什么

    数据库的唯一索引_数据库唯一索引是什么唯一索引是不允许表中任何两行具有相同索引值的索引。  当现有的数据中存在重复的键值时,大多数数据库不允许把新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。主键索引数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键

    2026年1月29日
    6
  • psm倾向得分匹配法举例_【计量地图】倾向得分匹配法(PSM)理论、操作与案例…[通俗易懂]

    这个方法的难点在于:首先,要明白反事实框架是一个什么样的东西?为什么一般把参与项目和不参与项目进行对比时会出现选择偏误?其次,搞清楚上面的原理之后,PSM真正难的是找到合适的协变量和完成两个苛刻的检验(共同支撑检验和平衡性检验)这篇文章我想达到哪些学习目标:(1)尽量汇集我看过的有用的资料(2)展示一个PSM分析的理论框架(3)针对难点说一下模型的调整问题(协变量选择、两个检验的调整)主要框架:1…

    2022年4月12日
    250

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号