Interlocked 原子操作的一个疑问

enic 2011-04-28 01:22:48
Interlocked 系列函数 提供了 + = 等原子操作
我想问的是:
InterlockedCompareExchange 这个函数是用来比较
但是我不需要Exchange 只需要InterlockedCompare怎么办?
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
enic 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaopoy 的回复:]
这个Exchange,就只是两个值相同的时候,会赋值给desc过去啊,你在传入参数时,这样写就可以了:

InterlockedCompareExchange ( &desc, desc, cmpared);
[/Quote]

囧,我也想过这个问题,但是,我咋知道成功了没有呢,,,
比如我想desc和1比较?
InterlockedCompareExchange(&des, des, 1) == 1; ?! - -!
xiaopoy 2011-04-28
  • 打赏
  • 举报
回复
这个Exchange,就只是两个值相同的时候,会赋值给desc过去啊,你在传入参数时,这样写就可以了:

InterlockedCompareExchange ( &desc, desc, cmpared);
enic 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aldam70 的回复:]
楼主是不想改变des的值来进行比较是吗
感觉这样做没什么意义
没有哪个Interlocked函数可以仅用来读取一个值但又不修改他(书上写的。。呵呵)
[/Quote]

分数给你吧,我可能把这个问题和读锁弄混淆了,,,

最后的是这么处理的,某一时刻取保取出的值是不变的:
typedef INT32 Atomic32;
typedef Atomic32 AtomicRefCount;

// @return: the result
inline Atomic32 AtomicRecCountIncN(volatile Atomic32 & out_atomic32Des,
Atomic32 in_atomic32Increment)
{
return ::InterlockedExchangeAdd(reinterpret_cast<volatile LONG*>(&out_atomic32Des),
in_atomic32Increment) + in_atomic32Increment;
}

// @return: the result
inline Atomic32 AtomicRecCountDecN(volatile Atomic32 & out_atomic32Des,
Atomic32 in_atomic32Increment)
{
return ::InterlockedExchangeAdd(reinterpret_cast<volatile LONG*>(&out_atomic32Des),
-in_atomic32Increment) - in_atomic32Increment;
}

// @return: the result
inline bool AtomicRecCountCompare(volatile Atomic32 & atomic32Src,
Atomic32 atomic32Des)
{
// to make the == operator atomic
// in this way the current atomic32Src's value is in atomic32Tem,
// and it's thread safe !
Atomic32 atomic32Tem = atomic32Src;

return (atomic32Tem == atomic32Des);
}
aldam70 2011-04-28
  • 打赏
  • 举报
回复
楼主是不想改变des的值来进行比较是吗
感觉这样做没什么意义
没有哪个Interlocked函数可以仅用来读取一个值但又不修改他(书上写的。。呵呵)
enic 2011-04-28
  • 打赏
  • 举报
回复
都没人关心丫,,,
enic 2011-04-28
  • 打赏
  • 举报
回复
自己来顶起一个

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧