windows-用户模式下的线程同步(整理)
2013-06-03 23:23
197 查看
1.原子访问:互锁函数族
1.1 互锁函数的机运行方式
互锁函数的运行取决于函数运行的处理器平台,对于x86系列的处理器来说,互锁函数会向总线发出一个硬件信号,防止其他处理器访问同一个内存地址。而在alpha处理器平台上,互锁函数能之行下列操作:(1)打开处理器的一个特俗的标志位,并标明被访问的内存地址。
(2)将内存的值读入一个寄存器
(3)修改该寄存器
(4)如果CPU中的特殊位标志是关闭的,则转入第二步。否则,特殊位标志仍然是打开的,就将寄存器的值重新存入内存。
1.2 主要的互锁函数
LONG InterLockedExchangeAdd(PLONG plAddend,LONG lIncrement; //增加或减少pladdend,取决于第二个参数的符号LONG InterLockedExchange(PLONG plTarget, LONG lValue);(32位/64位下可替代32位值)
LONG InterLockedExchangePointer(PVOID* ppvTarget, PVOID pvValue);(32位下可替代32位值,64位下只能替代64位值)
这两个函数用第二个参数的值代替第一个参数的值,返回原始值。InterLockedExchange在循环锁实现中是非常有用的。但是会浪费CPU时间,所以要小心使用。
POVID InterLockedCompareExchange(PLONG plDestination, LONG lExchange, LONG lComparand);(32位下替代32位值,64位下替代64位值)
POVID InterLockedCompareExchangePointer(PVOID* ppvDestination, PVOID pvExchange, PVOID pvComparand);(32位、64位下替代32位值)
这两个函数负责执行一个原子测试和设置操作。
2.临界区
2.1 定义
临界区是指一小段代码,在代码能够执行前,它必须独占对一些共享资源的访问权,是让若干行代码能够”能够以原子操作方式“来使用资源的一种方法注意问题:
(1)当拥有一项可以供多个线程访问的资源时,应该创建CRITICAL_SECTION结构。每一个共享资源都应该创建一个独立的上述结构。
(2)无论在何处拥有需要访问资源的代码,都必须调用EnterCriticalSection函数,并传递标示该资源的CRITICAL_SECTION结构地址。
(3)当使用资源完毕,调用LeaveCriticalSection函数,告诉系统资源使用完毕
优点和缺点:
(1)使用简单,在内部使用互锁函数,能够迅速运行
(2)无法对多个进程中的各个线程进行同步
2.2 使用
使用要求:(1)需要所有访问该资源的线程都知道CRITICAL_SECTION结构的地址
(2)使用前必须使用VOID InitializeCriticalSection(PCRITICAL_SECTION pcs);进行初始化
(3)当不再使用该资源时,调用VOID DeleteCriticalSection(PCRITICAL_SECTION pcs);来清除这个结构。
相关文章推荐
- Windows Via C/C++:用户模式下的线程同步——概述
- Windows核心编程学习七:用户模式下的线程同步
- 《Windows via C/C++》学习笔记(四)用户模式的“线程同步”
- windows核心编程-8.用户模式下的线程同步
- Windows Via C/C++:用户模式下的线程同步——临界区 Critical Sections
- Windows Via C/C++:用户模式下的线程同步——轻量级读写锁(Slim Reader-Writer Locks)
- Windows用户模式下的线程同步之CRITICAL_SECTION(关键字)
- Windows Via C/C++:用户模式下的线程同步——原子操作:Interlocked函数族
- 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“读写锁”
- Windows Via C/C++:用户模式下的线程同步——原子操作:Interlocked函数族
- Windows Via C/C++:用户模式下的线程同步——Condition Variables 条件变量
- Windows Via C/C++ 读书笔记 5 用户模式的线程同步
- Windows via C/C++ 学习(16)用户模式下的线程同步(一)
- 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“互锁函数族”
- windows线程同步-原子操作-Interlocked系列函数(用户模式)
- 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“条件变量”
- Windows Via C/C++:用户模式下的线程同步——Cache行
- windows 核心编程之8 用户模式下的线程同步
- Windows线程同步—用户模式下的线程同步
- 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“关键代码段”