下面是使用 CRITICAL_SECTION 实现互斥的例子:

#include <windows.h>
#include <iostream>
using namespace std;

//#define USE_CRITICAL_SECTION

CRITICAL_SECTION g_cs;

DWORD WINAPI thread(PVOID pBuf)
{
#ifdef USE_CRITICAL_SECTION
    EnterCriticalSection(&g_cs);
#endif
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    srand(li.QuadPart);
    int time = rand() % 1000;
    cout<<"Sleep time: "<<time<<" ms"<<endl;
    Sleep(time);
    cout<<"This is "<<(char*)pBuf<<endl;
#ifdef USE_CRITICAL_SECTION
    LeaveCriticalSection(&g_cs);
#endif
    return 0;
}

void main()
{
#ifdef USE_CRITICAL_SECTION
    InitializeCriticalSection(&g_cs);
#endif
    CreateThread(0, 0, &thread, "thread 1", 0, 0);
    CreateThread(0, 0, &thread, "thread 2", 0, 0);
    Sleep(2100);
}

除了使用临界区(CRITICAL_SECTION)外,还有其它方法,如互斥(mutex)、事件(event)等等。

使用临界区 CRITICAL_SECTION 实现互斥相关推荐

  1. Windows 临界区(CRITICAL_SECTION)的使用

    由于需要在多线程中并发操作临界数据,为了保证临界数据操作的完整性,Linux下使用锁(Linux下锁可以看我的这篇博客Linux 互斥锁 递归锁 自旋锁 读写锁),而在Windows下,使用的是临界区 ...

  2. C++ 线程同步之临界区CRITICAL_SECTION

    一.临界区临界区又称关键代码段,指的是一小段代码在代码执行前,他需要独占一些资源.程序中通常将多线程同时访问的某个资源作为临界区,需要定义一个CRITICAL_SECTION类型的变量,然后调用Ini ...

  3. win32线程学习总结(临界区,互斥体,事件,信号量)

    一.临界区 CRITICAL_SECTION 例程 https://blog.csdn.net/Kwansy/article/details/106485496 临界区用于资源互斥访问,性能比互斥体好 ...

  4. 互斥量和临界区的区别

    互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用.互斥量在系统的任何进程里都是可见的,也就是说,一个进程创建了一个互斥量,另一个进程试图去获取该锁是合法的.然而,临界区的 ...

  5. LINUX线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量等

    注:摘自<程序员的自我修养>相关章节. 原子操作 共享数据(全局变量或堆变量)的自增(++)操作在多线程环境下会出现错误是因为这个操作(一条c语句)被编译为汇编代码后不止一条指令,因此在执 ...

  6. 临界区互斥的软件实现方法

    文章目录 C++11 thread join和detach join detach pslist命令 使用pslist查看单线程进程 使用pslist命令观察多线程进程 单处理机下多线程程序的行为 临 ...

  7. 临界资源与临界区、互斥与同步、原子性概念介绍

    目录 一.临界资源与临界区 二.互斥的概念 三.同步的概念 四.原子性的概念 一.临界资源与临界区 临界资源:凡是能被多个执行流同时访问的资源就是临界资源!(比如多个线程访问同一个全局变量,这里的全局 ...

  8. Windows下C++多线程同步与互斥简单运用-转

    1.  互斥量,Mutex [cpp] view plaincopy #include <Windows.h> #include <iostream> using namesp ...

  9. 如何避免操作系统中多线程资源竞争的互斥与同步?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 先来看看虚构的小故事 已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕. 没办 ...

最新文章

  1. dofuscator C# 混淆器 原来如此
  2. Kotlin的高阶函数和常用高阶函数
  3. SVM与SoftMax分类器
  4. 三流面试问技术,二流面试问平台,一流面试……
  5. 编程相关离线文档下载方式推荐
  6. 消息中间件原理及JMS简介之二
  7. ubuntu安装过程中遇到的一些问题及解决办法。
  8. XJOI 3866 写什么名字好呢
  9. VUE 完整项目构建 (1) -- 初始化
  10. 计算机软件工程自考,自考软件工程试题及答案2021年10月
  11. 阿里褚霸专访-揭秘技术男开挂升级的职业路径(回帖有奖)
  12. 腾讯成立技术委员会,地位高于 6 大事业群
  13. 命令行如何 copy 文件内容到剪切板(clipboard)?
  14. 学习笔记整理:Photoshop软件应用-基础-图像选择
  15. Matlab 拉丁超立方采样lhsdesign函数、lhsnorm函数介绍
  16. IEEP-OSPF域内路由故障-现象与排障思路
  17. Java io流 解压缩多个文件 损坏问题解决
  18. JetBrains 学习认证(idea学生认证)
  19. javascript百炼成仙 第一章 掌握JavaScript基础 1.12 JavaScript运算符
  20. FastDFS 单机版部署

热门文章

  1. SQL语句一次INSERT多条记录的方法
  2. 探秘IntelliJ IDEA 13测试版新功能——调试器显示本地变量
  3. 盛趣游戏 html5游戏,盛趣游戏谭雁峰:游戏破局的“精细”时代已来
  4. binary hacks读数笔记(共享库)
  5. Oracle管理表空间和数据文件详解
  6. WCF:如何将net.tcp协议寄宿到IIS
  7. win7下计划任务schtasks使用详解及错误:无法加载列资源的解决方法1
  8. java future设计模式
  9. 风靡全网的H5究竟是什么?
  10. OpenMP 编程实例(蒙特卡罗算法)