线程同步——用户模式下线程同步——Interlocked实现线程同步
2014-08-16 10:57
441 查看
线程同步分为用户模式下的线程同步和内核对象的线程同步。 当然用户模式下的线程同步实现速度比内核模式下快,但是功能也有局 //1.利用原子访问: Interlocked系列函数,关于Interlocked系列函数,我需要知道的是他们,执行的极快 //(1)首先是InterlockedExchangeAdd兄弟函数, //第一个参数 Addend 代表进行操作数的地址, //第二个参数 Value 代表增加的值,如果是想进行减法,传负数即可 LONG InterlockedExchangeAdd( LONG volatile *Addend, LONG Value ) ; LONG InterlockedExchangeAdd64( LONG64 volatile *Addend, LONG64 Value ); //(2)还有其它3个Interlocked函数 LONG InterlockedExchange( LONG volatile *Target, LONG Value ) ; LONGLONG InterlockedExchange64( LONG64 volatile *Target, LONG64 Value ); PVOID InterlockedExchangePointer( PVOID volatile *Target, PVOID Value ); //InterlockedExchange 和 InterlockedExchangePointer //会把第一个参数所指向的内存地址的当前值,以原子方式替换为第二个参数指定的值 //(3)最后的另个Interlocked交换函数 PLONG InterlockedCompareExchange( LONG volatile *Destination, LONG Exchange, LONG Comperand ) ; PLONG InterlockedCompareExchangePointer( PVOID volatile *Destination, PVOID Exchange, PVOID Comperand ) ; //函数执行的伪代码 { if (Destination == Comperand ) { Destination = Exchange ; } } //函数会将当前值Destination与参数Comparand进行比较,如果两个值相同, //那么函数会将*Destination 修改为Exchange,否则Destination保值不变 //实现旋转锁时,InterlockedExchange及其有用 //下面演示一下旋转锁 BOOL g_fResourceInUse = FALSE ; void Func1() { //等待接收资源 while(InterlockedExchange(&g_fResourceInUse,TRUE) == TRUE ) Sleep(0); //接收资源 //我们不在需要接收资源 InterlockedExchange(&g_fResourceInUse,FALSE) ; } #include "windows.h" #include "iostream" using namespace std; long g_x = 0 ; //定义线程函数1 DWORD WINAPI ThreadFunOne(PVOID pvParam) ; //定义线程函数2 DWORD WINAPI ThreadFunTwo(PVOID pvParam); int main() { //创建线程1 HANDLE hThreadOne = CreateThread(NULL,0,ThreadFunOne,0,0,NULL); CloseHandle(hThreadOne); //创建线程2 HANDLE hThreadTwo = CreateThread(NULL,0,ThreadFunTwo,0,0,NULL); CloseHandle(hThreadTwo); //让主线程先挂起,确保其它线程执行完成 Sleep(10000); cout<<g_x<<endl; return 0 ; } DWORD WINAPI ThreadFunOne(PVOID pvParam) { InterlockedExchangeAdd(&g_x,1) ; return 0; } DWORD WINAPI ThreadFunTwo(PVOID pvParam) { InterlockedExchangeAdd(&g_x,1) ; return 0; } 限性,所以我们在利用线程同步时应先考虑用户模式下的线程同步
相关文章推荐
- 线程同步——用户模式下线程同步——关键段实现线程同步
- 第8章 用户模式下的线程同步(1)_Interlocked系列函数
- windows线程同步-原子操作-Interlocked系列函数(用户模式)
- 线程同步——用户模式下线程同步——Slim读写锁实现线程同步
- 基元用户模式构造--互锁构造 Interlocked 实现的异步web请求实例
- 线程同步 旋转锁 Interlocked 用户模式同步对象 InterlockedExchange
- Windows核心编程:用户模式下的线程同步
- Windows Via C/C++:用户模式下的线程同步——Condition Variables 条件变量
- 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“条件变量”
- 在Forms验证模式下,实现多个站点(SubDomain相同)共享同一用户登录状态
- 第八章:用户模式下的线程同步
- Windows Via C/C++:用户模式下的线程同步——临界区 Critical Sections
- Windows Via C/C++:用户模式下的线程同步——轻量级读写锁(Slim Reader-Writer Locks)
- 在Forms验证模式下,实现多个站点(SubDomain相同)共享同一用户登录状态
- 《Windows核心编程》第8章 用户模式下的线程同步
- Windows via C/C++ 学习(16)用户模式下的线程同步(一)
- 核心编程笔记8——用户模式下的线程同步
- 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“读写锁”
- 实现了观察者模式的用户控件。
- 用户模式的线程同步原子访问:InterLocked互锁函数