C/C++|C/C++ nvm::threading::Interlocked class -- shared
usage
/*
usage
*/
#include #include "nvm.h"
#include "threading/Interlocked.h"static nvm::Int32 g_globalAutoIncrnum = 0;
using nvm::threading::Interlocked;
int main(int argc, char* argv[])
{
if (!Interlocked::CompareExchange(g_globalAutoIncrnum, 1, 0))
{
printf("localTaken=true\n");
}
else
{
printf("localTaken=false\n");
}
printf("Rd-signal=%02d\n", Interlocked::Read(g_globalAutoIncrnum));
return 0;
}
Interlocked.h
#ifndef INTERLOCKED_H
#define INTERLOCKED_H#include "../nvm.h"namespace nvm
{
namespace threading
{
class Interlocked // static class
{
public:
static nvm::Int32 Increment(volatile nvm::Int32& location);
static nvm::Int64 Increment(volatile nvm::Int64& location);
static nvm::Int32 Decrement(volatile nvm::Int32& location);
static nvm::Int64 Decrement(volatile nvm::Int64& location);
static nvm::Int32 Exchange(volatile nvm::Int32& location1, nvm::Int32 value);
static nvm::Int64 Exchange(volatile nvm::Int64& location1, nvm::Int64 value);
static nvm::Int32 CompareExchange(volatile nvm::Int32& location1, nvm::Int32 value, nvm::Int32 comparand);
static nvm::Int64 CompareExchange(volatile nvm::Int64& location1, nvm::Int64 value, nvm::Int64 comparand);
static nvm::Int32 Read(volatile nvm::Int32& location);
static nvm::Int64 Read(volatile nvm::Int64& location);
static nvm::Int32 Add(volatile nvm::Int32& location1, nvm::Int32 value);
static nvm::Int64 Add(volatile nvm::Int64& location1, nvm::Int64 value);
};
}
}
#endif
Interlocked.cpp
#include "Interlocked.h"#include
#include
#include namespace nvm
{
namespace threading
{
nvm::Int32 Interlocked::Increment(volatile nvm::Int32& location)
{
return (nvm::Int32)InterlockedIncrement((LONG*)&location);
}
nvm::Int64 Interlocked::Increment(volatile nvm::Int64& location)
{
return (nvm::Int64)InterlockedIncrement((unsigned long long*)&location);
}
nvm::Int32 Interlocked::Decrement(volatile nvm::Int32& location)
{
return (nvm::Int32)InterlockedDecrement((LONG*)&location);
}
nvm::Int64 Interlocked::Decrement(volatile nvm::Int64& location)
{
return (nvm::Int64)InterlockedDecrement((unsigned long long*)&location);
}
nvm::Int32 Interlocked::Exchange(volatile nvm::Int32& location1, nvm::Int32 value)
{
return (nvm::Int64)InterlockedExchange((LONG*)&location1, (LONG)value);
}
nvm::Int64 Interlocked::Exchange(volatile nvm::Int64& location1, nvm::Int64 value)
{
return (nvm::Int64)InterlockedExchange((unsigned long long*)&location1, (unsigned long long)value);
}
nvm::Int32 Interlocked::CompareExchange(volatile nvm::Int32& location1, nvm::Int32 value, nvm::Int32 comparand)
{
return (nvm::Int32)InterlockedCompareExchange((LONG*)&location1, (LONG)value, (LONG)comparand);
}
nvm::Int64 Interlocked::CompareExchange(volatile nvm::Int64& location1, nvm::Int64 value, nvm::Int64 comparand)
{
return (nvm::Int64)InterlockedCompareExchange((unsigned long long*)&location1, (unsigned long long)value, (unsigned long long)comparand);
}
nvm::Int32 Interlocked::Read(volatile nvm::Int32& location)
{
return Interlocked::CompareExchange(location, 0, 0);
}
nvm::Int64 Interlocked::Read(volatile nvm::Int64& location)
{
return Interlocked::CompareExchange(location, 0, 0);
}
nvm::Int32 Interlocked::Add(volatile nvm::Int32& location1, nvm::Int32 value)
{
return (nvm::Int64)InterlockedExchangeAdd((LONG*)&location1, (LONG)value);
}
nvm::Int64 Interlocked::Add(volatile nvm::Int64& location1, nvm::Int64 value)
{
return (nvm::Int64)InterlockedExchangeAdd64((LONG64*)&location1, (LONG64)value);
}
}
}
【C/C++|C/C++ nvm::threading::Interlocked class -- shared】
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- c++基础概念笔记
- 牛逼!C++开发的穿越丛林真人游戏,游戏未上线就有百万人气
- C++Primer之|C++Primer之 函数探幽
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- QML基础信息
- C++-类型转换
- MongoDB|MongoDB - 简介
- C++面试题目总结