在我们接触到的多线程书籍里面,提到最多的就是线程同步问题了。

但是,我们看到最多的例子也是对一个临界资源的访问。

但是当我们自认为感觉靴子很好的时候,问题出现了,怎么才能够使我们让线程按照一定的顺序访问。

其实我们学习的东西就已经可以使用了,只是我们受到书籍的影响导致我们写不出来而已。

当然,学习多线程,操作系统学习是避免不了的!

下面就是我写的代码

主要实现一个功能:

A和B必须同时打印。单独出现AA不行,单独出现BB也不可以。

#include <iostream>
#include <windows.h>
using namespace std;CRITICAL_SECTION cs[2];DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{while (1){EnterCriticalSection(&cs[0]);cout<<"A\n";LeaveCriticalSection(&cs[1]);Sleep(1000);}return 0;
}DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{while (1){EnterCriticalSection(&cs[1]);cout<<"B\n";LeaveCriticalSection(&cs[0]);Sleep(1000);}return 0;
}int main()
{InitializeCriticalSection(&cs[0]);InitializeCriticalSection(&cs[1]);HANDLE hand[2];hand[0] =  CreateThread( NULL , NULL ,ThreadProc1 , NULL , 0 , NULL )  ;hand[1] =  CreateThread( NULL , NULL ,ThreadProc2 , NULL , 0 , NULL ) ;WaitForSingleObject(hand[0] , INFINITE );WaitForSingleObject(hand[1], INFINITE);DeleteCriticalSection(&cs[0]);DeleteCriticalSection(&cs[1]);CloseHandle(hand[0]);CloseHandle(hand[1]);return 0;
}

线程同步--关键代码段(二)相关推荐

  1. 线程同步--关键代码段(一)

    线程同步有四种方式 但是在一个进程中,效率最高的,方式是 :关键代码段 #include <iostream> #include <windows.h> #include &l ...

  2. 线程同步--关键代码段(三)

    前面讲述了如何使用关键代码段. 但是关键代码段还有一些不为人知的秘密,也是多数程序员忽略的东西,特别是在多核cpu上面,我们必须知道的东西. 下面是<windows核心编程>这本书里面的一 ...

  3. Windows编程-- 用户方式中线程的同步---关键代码段(临界区)

    可以从例子学习,更好的掌握 #include <windows.h> #include <iostream.h> //两个线程的声明 DWORD WINAPI Fun1Proc ...

  4. 线程同步之关键代码段

    关键代码段: 1) 关键代码段(临界区)工作在用户方式下. 2) 关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权. 用InitializeCriticalSect ...

  5. VC++中多线程学习(MFC多线程)三(线程同步包含:原子互锁、关键代码段、互斥器Mutex、Semaphores(信号量)、Event Objects(事件))

    目录 ​​​​​​​​​​​​ 线程同步的必要性: 2.解决同步问题的方法 2.1原子互锁家族函数 2.2Critical Sections(关键代码段.关键区域.临界区域) 2.3 互斥器Mutex ...

  6. 【Window】线程同步方式1——临界区(关键代码段)

    第一节:[Window]创建线程的3种方式 第二节:[Window]线程同步概述 第三节:[Window]线程同步方式1--临界区(关键代码段) 第四节:[Window]线程同步方式2--互斥量 第五 ...

  7. 秒杀多线程第五篇 经典线程同步 关键段CS

    上一篇<秒杀多线程第四篇 一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题. 本文首先介绍下如何使用关键段,然 ...

  8. 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份

    摘要 开发者有时创建的多线程程序会生成错误值或产生其它奇怪的行为.古怪行为一般出现在一个多线程程序没使用同步连载线程访问关键代码部份的时候.同步连载线程访问关键代码部份是什么意思呢?在这篇文章中解释了 ...

  9. 互斥对象与关键代码段的比较

    9.6.2 互斥对象与关键代码段的比较 就等待线程的调度而言,互斥对象与关键代码段之间有着相同的特性.但是它们在其他属 性方面却各不相同.表 9 - 1 对它们进行了各方面的比较. 表 9-1 互斥对 ...

最新文章

  1. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解
  2. 可以在某些场合替代onload事件的domReady事件
  3. CUBA Platform 7.0.4 发布,企业级应用开发平台
  4. 轻松搭建基于 SpringBoot Vue 的 Web 商城应用
  5. ASP.NET MVC (四、ASP.NET Web API应用程序与跨域操作)
  6. 从函数中返回多个值的方法
  7. 谷歌浏览器开发调试工具中Sources面板 js调试等 完全介绍
  8. 【Python】pyinstaller模块将py文件打包为windows可执行文件exe
  9. Android PullToRefreshListView上拉刷新和下拉刷新
  10. 空间波(space wave)
  11. 主席树 POJ2104
  12. java枚举ordinal()接口怎么用,java.lang.Enum.ordinal()方法实例
  13. 【谷歌地图--PlacesSDK集成】
  14. 制作Win7PE精简版的经验总结笔记二
  15. 繁星花落谁家(屠龙)算法和统计概率结论
  16. J2ME--丰富多彩的领域中生机勃勃的技术
  17. c语言kbhit函数在哪里,kbhit()函数
  18. CES 2019上芯片巨头们的争夺焦点:光线追踪、“永远”在线PC、汽车
  19. 【转】人脸识别图像库
  20. dds:core:policy

热门文章

  1. qt程序使用多行linux命令,开发Qt应用程序的基本方法总结
  2. python实现装饰器_Python装饰器是怎么实现的?
  3. make clean
  4. 自定义关键字_Java中的自定义异常
  5. java 给字典类型赋值_java使用forEach填充字典值
  6. android 图片预览动画,Android图片上传实现预览效果
  7. python单向循环链表_python实现单向循环链表 -- 详细思路分析
  8. STM8学习笔记---串口通信中如何自己定义通信协议
  9. Python基础——字符串、列表、元组
  10. phpstorm增加swoole自动提示