线程同步的主要问题,在于需要解决不止一个线程同时执行某一段代码,访问同一个内存中的数据,临界区对象就是为了解决这个问题,它是一个CRITICAL_SECYION结构,被windows内部使用这个结构记录一些信息,确保同一时间只有一个线程访问该数据段中的数据

临界对象的代码示例

///
// CriticalSection.cpp文件#include <stdio.h>
#include <windows.h>
#include <process.h>BOOL g_bContinue = TRUE;
int g_nCount1 = 0;
int g_nCount2 = 0;
CRITICAL_SECTION g_cs; // 对存在同步问题的代码段使用临界区对象UINT __stdcall ThreadFunc(LPVOID);int main(int argc, char* argv[])
{UINT uId;HANDLE h[2];::InitializeCriticalSection(&g_cs);   // 初始化临界区对象,g_cs是一个LP指针,指向CRITICAL_SECTION结构h[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &uId);h[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &uId);// 等待1秒后通知两个计数线程结束,关闭句柄Sleep(1000);g_bContinue = FALSE;::WaitForMultipleObjects(2, h, TRUE, INFINITE);::CloseHandle(h[0]);::CloseHandle(h[1]);// 删除临界区对象,临界对象使用完后一定要删除,以免内存泄漏::DeleteCriticalSection(&g_cs);printf("g_nCount1 = %d \n", g_nCount1);printf("g_nCount2 = %d \n", g_nCount2);return 0;
}UINT __stdcall ThreadFunc(LPVOID)
{while(g_bContinue){::EnterCriticalSection(&g_cs);              //进入临界对象,同一时间,只允许一个线程进入g_nCount1++;g_nCount2++;::LeaveCriticalSection(&g_cs);             //离开临界对象,表示临界对象现在可以被其它线程进入}return 0;
}

互锁函数

互锁函数的远离比较简单,基本规则是,它自增或者自减变量时,阻止其它线程同时使用该变量

事件内核对象

这东西主要用于线程之间互相通信,告知工作状态和控制信号。比如事件对象就是用于这个范畴的

事件对象由CreatEvent创建

信号量内核对象

信号量允许超过一个以上的线程同时访问一个资源,但是他有线程数量上限的限制

互斥内核对象

这玩意和临界区对象最大的不同是它是内核对象,由系统管理,它可以跨越进程,临界区不行,临界区性能高资源占用少,互斥对象性能低,资源消耗大
http://blogold.chinaunix.net/u2/86649/showart.php?id=1672176

3.2.6 线程局部存储

英文名称TLS,和线程关联的数据结构,可以利用其获取线程的生命周期,不过老实说还是不太清楚这样做的特殊意义,以后遇上了,再说吧

windows程序设计(第2版 王艳平)学习记要:3.2 线程同步相关推荐

  1. windows程序设计 Charles Petzold VS 王艳平

    王艳平的的<windows程序设计>和外国的重复吗,看哪个好啊? Charles Petzold的那本比较侧重于应用,比较全面的介绍了win32编程 但个人 感觉深度不够,很多东西只是点到 ...

  2. 《lua程序设计(第二版)》学习笔记(五)-- 函数基础

    -- 第 5 章 函数-- 一种对语句和表达式进行抽象的主要机制 print(os.date()); -- 打印日期 Sun Apr 20 12:44:46 2014 -- 一看到sun,感慨广州没有 ...

  3. 《windows 程序设计》中的翻译错误----学习笔记

    1.(23页第13行):"宽字符不需要Unicode.Unicode是一种可能的宽字符编码."这是什么意思?查查原文,原来是:Wide characters  aren't nec ...

  4. Windows程序设计第五版源代码---LINEDEMO

    源代码如下: #include <windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI Win ...

  5. C++多线程学习(三)——线程同步之条件变量

    前面学习了互斥量似乎我们就可以多线程编程了,多线程也不过如此嘛.然而我们上手coding,用多线程来结局我们实际需求就会发现,似乎多线程也不是很好用.因为我们实际对于多线程的需求,往往线程都是whil ...

  6. Windows核心编程:第9章 用内核对象进行线程同步

    Github https://github.com/gongluck/Windows-Core-Program.git //第9章 用内核对象进行线程同步.cpp: 定义应用程序的入口点. //#in ...

  7. C++语言程序设计第四版郑莉

    C++语言程序设计第四版郑莉--学习笔记 第四章 类与对象 4.3构造函数与析构函数 例4-2 在程序主函数中,3个部分分别给出复制构造函数调用的3种情况. #include <iostream ...

  8. 《Windows 程序设计(第3版)》——6.7 【实例】窗口查看器

    本节书摘来自异步社区<Windows 程序设计(第3版)>一书中的第6章,第6.7节,作者:王艳平 , 张铮著,更多章节内容可以访问云栖社区"异步社区"公众号查看 6. ...

  9. Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(畅销10年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 75 ...

最新文章

  1. python内置函数open_python_内置函数和open
  2. 一文解决new/delete与malloc/free相关问题:区别?注意事项?使用方式?
  3. IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
  4. Linux大文件格式,linux – 用于打印大文件的命令,按大小以人类可读的格式排序...
  5. modification of global variable “Promise.prototype.finally“ is not allowed when using plugins at app
  6. 容器编排技术 -- Kubernetes是什么
  7. efi引导文件_你们心心念念的oc通用EFI来了!
  8. Python数据分析学习笔记:Python数据可视化入门
  9. shell中用grep查找并且不输出_grep awk 搜索日志常用命令
  10. .net平台借助第三方推送服务在推送Android消息(极光推送) 转
  11. aix mysql日志,一次AIX 操作系统ASM添加磁盘的操作日志
  12. 团队项目—第二阶段第五天
  13. inno setup安装之前关闭mysql_inno setup 安装前判断进程是否存在,以及停止相应进程转...
  14. 论文《基于FPGA 的CFAR 设计与实现》复现
  15. npm ERR! code EINTEGRITY npm! ERR! shal-
  16. ios Reading from private effective user settings
  17. java的lookup方法_lookup方法注入
  18. 【转】如何使html5语义化标签兼容ie
  19. (八)高德地图之添加marker标记点
  20. 2022焊工(初级)考试题库及答案

热门文章

  1. 远程服务器120天,Windows 2008 突破windows远程桌面会话主机120天试用期限制
  2. 外键SQL语句的编写及实例
  3. 短视频营销为什么能火起来?
  4. 【微信小程序 | 实战开发】配置开发环境、生产环境和API
  5. Github每日精选(第76期):在 Mac 状态栏上显示进程流量的监视器ITraffic-monitor-for-mac
  6. 2017战略No.2:开始电子化记账
  7. 黑暗传说单机自动挂机_黑暗传说单机RPGiPhone版|黑暗传说单机RPG苹果版下载_v8.1.0_9ht苹果下载...
  8. 惊恐 !ChatGPT通过谷歌L3入职面试,拿到18万美元offer,人类码农危?
  9. TensorFlow 1.0.0rc1上玩量化神经网络 ——转自 慢慢学TensorFlow 微信公众号
  10. 取消珊瑚虫qq的一键锁定