欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


Win7/Win8.1用户:这样移除Win10“快速访问”功能
华硕主板M5A78L-M LX3 PLUS前置面板音频无声音怎么办?
哪种类型的条码碳带耐刮性最好?
NVIDIA Optimus双显卡如何切换
windows系统如何设置开机密码
开机的时候启动项或者系统服务开启太多对电脑有影响
U盘量产知识介绍
一个实用的WinPE小技巧
2种windows版本查看方法
Win7/8没收到win10升级提示解决办法
windows操作系统的同步机制
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

   最近看了下windows核心编程,虽然是比较老的书,但是感觉还是蛮有用的,顺便复习了一些操作系统的知识,比如本文的进程同步机制

  用户模式下的线程同步

  线程之间需要通信:

  1.需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性

  2.一个线程需要通知其他线程某项任务已经完成

  方法一:原子访问:Interlocked系列函数

  InterlockedExchangeAdd(long & ,int );

  InterlockedIncrement;

  InterlockedExchange;(实现旋转锁是有用)

  必须保证传给这些函数的变量地址是对齐的,否则函数可能失败

  interlockde函数不需要在内核模式与用户模式之间切换

  旋转锁:禁用线程优先级提升

  多处理器的机器旋转锁比较有用,

  关键段:先循环一定次数,如果还是无法访问,线程切换至内核模式,直到资源可用

  interlockedcompareexchange

  方法二:关键段

  CRITICAL_SECTION g_cs;

  EnterCriticalSection(&g_cs)

  …

  LeaveCrititalSection(&g_cs)

  关键段无法在多个进程之间对线程同步

  方法三:Slim读/写锁

  和关键段相似,但是区分读取线程和写入线程

  SRWLOCK

  用内核对象进行线程同步

  在进程内核对象内部有一个布尔变量,当系统创建内核对象的时候会把这个变量的值初始化为false(未触发),当进程终止时,操作系统会把相应的内核对象中的值设置为true,表示已经触发。

  等待函数:WaitForSingleObject(HANDLE,DWORD)

  WaitForMultipleObjects(DWORD,CONST HANDLE* ,BOOL,DWORD)

  事件内核对象

  让一个线程执行初始化工作,然后出发另一个线程,让它执行余下的工作

  createEvent()

  OpenEvent()

  SetEvent()//触发时

  ResetEvetn()

  可等待的计数器内核对象

  createWaitableTimer()

  OpenwaitableTimer()

  SetWaitableTimer()//触发时

  信号量

  互斥量

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站