Windows线程同步之互锁函数(Interlocked)
来源:互联网 发布:公共软件服务经营范围 编辑:程序博客网 时间:2024/05/17 22:10
Windows下进程内部的各个线程之间的同步不需要借助内核对象,Windows提供的默认在用户模式下的线程同步工具。
互锁函数为多线程同步访问共享变量提供了一个简单的机制。如果变量在共享内存,不同进程的线程也可以使用此机制。
互锁函数对共享变量的操作是原子的,这个原子性体现在保证多线程在同一个时刻只能有一个线程获得对该同步变量的操作权限。
(1)InterlockedExchangeAdd()
LONG __cdecl InterlockedExchangeAdd( _Inout_ LONG volatile *Addend, _In_ LONG Value);LONGLONG __cdecl InterlockedExchangeAdd64( _Inout_ LONGLONG volatile *Addend, _In_ LONGLONG Value);//Addend:指向一个32位变量的指针;//Value:共享变量上要加的值;//Return value:返回修改前变量的值;
InterlockedExchangeAdd互锁函数提供了对变量进行加法操作,保证了同一时刻只有一个线程对这个变量进行加法操作。Value是正数的时候进行加法操作,是负数的时候进行减法操作。
(2)InterlockedIncrement() & InterlockedDecrement()
LONG __cdecl InterlockedIncrement( _Inout_ LONG volatile *Addend);LONG __cdecl InterlockedDecrement( _Inout_ LONG volatile *Addend);//Addend:指向一个32位变量的指针;//Return value:修改前变量的值;
InterlockedIncrement互锁函数对一个32变量进行增1操作,InterlockedDecrement则进行减1操作。保证线程之间的互斥的进行访问。 这两个函数都是16位和64位版本。
(3)InterlockedExchange()
LONG __cdecl InterlockedExchange( _Inout_ LONG volatile *Target, _In_ LONG Value);//Target:指向一个32位变量的指针;//Value:要替换的值;//Return Value:修改之前的值;PVOID __cdecl InterlockedExchangePointer( _Inout_ PVOID volatile *Target, _In_ PVOID Value);//Target:指向一个32位变量的指针的指针;//Value:要替换的指针的值;//Return Value:修改之前的值;
InterlockedExchange函数把第一个参数指向的内存地址的值,以原子的方式替换为第二个参数的值。并返回原来的值。InterlockedExchangePointer替换的是指针而已。
InterlockedExchange函数还有8位,16位和64位的版本;
(4)InterlockedCompareExchange()
LONG __cdecl InterlockedCompareExchange( _Inout_ LONG volatile *Destination, _In_ LONG Exchange, _In_ LONG Comparand);//Destination:指向当前值的指针;//Exchange:比较成功后要替换的值;//Comparand:和当前值进行比较的值;//Return Value:修改之前的值;PVOID __cdecl InterlockedCompareExchangePointer( _Inout_ PVOID volatile *Destination, _In_ PVOID Exchange, _In_ PVOID Comparand);
InterlockedCompareExchange函数会将Destination指向的当前值和Comparand进行比较,如果相同会将Destination指向的值替换为Exchange的值,否则*Destination保持不变。函数的返回值为修改之前的值。
关于互锁函数还有很多,具体可以参考msdn上的线程同步函数的手册:
http://msdn.microsoft.com/en-us/library/ms686360%28v=vs.85%29.aspx
Jun 19, 2013 PM 22:44 @dorm
- Windows线程同步之互锁函数(Interlocked)
- Windows线程同步之互锁函数(Interlocked)
- Windows线程同步--互锁变量访问(Interlocked)
- 用户模式的线程同步原子访问:InterLocked互锁函数
- Interlocked 互锁函数 (windows.h)
- Interlocked系列互锁函数
- Interlocked系列互锁函数
- c#之线程同步浅析(1)-----轻量级同步Interlocked
- c#之线程同步浅析(1)-----轻量级同步Interlocked
- [并发并行]_[线程同步]_[Windows用户态下的原子访问的互锁函数]
- 线程同步一:InterLocked系列函数
- Interlocked系列函数线程同步的缺陷
- .NET线程同步之Interlocked构造
- -【用户方式线程同步】互锁的函数家族
- 线程同步(使用Interlocked类)
- Windows多线程基础(6):线程间通信1(互锁函数、CriticalSection)
- 黑马程序员--interlocked(互锁)
- Windows Via C/C++:用户模式下的线程同步——原子操作:Interlocked函数族
- java单例模式
- 安装pyquery
- cocos2d
- 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源
- Robot类的相关使用
- Windows线程同步之互锁函数(Interlocked)
- YUV420图像格式
- 浅析innodb_support_xa与innodb_flush_log_at_trx_commit
- LAMP 平台
- cocos2d
- java常用的集合操作
- [转]配置VIM语法高亮及自动缩进
- Sum of divisors
- 寻找最大的K个数