读书人

《windows核心编程系列》谈谈用户模式

发布时间: 2012-10-20 14:12:47 作者: rapoo

《windows核心编程系列》谈谈用户模式下的线程同步

用户模式下的线程同步

系统中的线程必须访问系统资源,如堆、串口、文件、窗口以及其他资源。如果一个线程独占了对某个资源的访问,其他线程就无法完成工作。我们也必须限制线程在任何时刻都能访问任何资源。比如在一个线程读内存时要限制其他线程对此块内存进行写入。


线程之间的通信很重要,尤其是在以下两种情况下:

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

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


线程同步包括许多方面,windows提供了许多基础设施使线程同步变得容易。

用户模式下的线程同步:方法一,原子访问

线程同步的一大部分与原子访问有关。所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问统一资源。


比如有全局变量a=0;有两个线程同时对一全局变量进行a++操作,然后返回结果。那么最后a是多少呢?让我们从汇编代码上分析一下。

A++编译器会编译成两行代码:

Void WakeConditonVariable(   PCONDITION_VARIABLE ConditionVariable);Void WakeAllConditionVariable(   PCONDITION_VARIABLE ConditionVariable);


WakeConditionVariable会使SleepConditionVariable*等待的同一个条件变量被触发的线程得到锁并返回。当此线程释放这个锁的时候,不会唤醒其他正在等待此条件变量的线程。

读书人网 >编程

热点推荐