1 Star 0 Fork 0

GreateCoder/tlib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
tatomic.cxx 1.32 KB
一键复制 编辑 原始数据 按行查看 历史
肉肉 提交于 2016-03-12 23:00 . no commit message
#include "tatomic.h"
#ifdef WIN32
#include <windows.h>
#endif
namespace tlib
{
//自增,返回新值
int TAtomic::AtomSelfAdd(void* var)
{
#ifdef WIN32
return InterlockedIncrement((long*) (var));
#else
return __sync_add_and_fetch((int*) (var), 1);
#endif
}
//自减,返回新值
int TAtomic::AtomSelfDec(void* var)
{
#ifdef WIN32
return InterlockedDecrement((long*) (var));
#else
return __sync_add_and_fetch((int*) (var), -1);
#endif
}
//加一个值,返回旧值
int TAtomic::AtomAdd(void* var, const int value)
{
#ifdef WIN32
return InterlockedExchangeAdd((long*) (var), value);
#else
return __sync_fetch_and_add((int*) (var), value);
#endif
}
//减一个值,返回旧值
int TAtomic::AtomDec(void* var, int value)
{
value = value * -1;
#ifdef WIN32
return InterlockedExchangeAdd((long*) (var), value);
#else
return __sync_fetch_and_add((int*) (var), value);
#endif
}
//赋值,windows下返回新值,linux下返回旧值
int TAtomic::AtomSet(void* var, const int value)
{
#ifdef WIN32
::InterlockedExchange((long*) (var), (long) (value));
#else
__sync_lock_test_and_set((int*) (var), value);
#endif
return value;
}
//取值
int TAtomic::AtomGet(void* var)
{
#ifdef WIN32
return InterlockedExchangeAdd((long*) (var), 0);
#else
return __sync_fetch_and_add((int*) (var), 0);
#endif
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/GreateCoder/tlib.git
[email protected]:GreateCoder/tlib.git
GreateCoder
tlib
tlib
master

搜索帮助