From 88f0a7831ed4db1d407e2ab71fb6d0e5118a40cd Mon Sep 17 00:00:00 2001 From: i7-8700 <1281261856@qq.com> Date: Fri, 13 Dec 2019 22:33:36 +0800 Subject: [PATCH] testing atomic --- test/test.sln | 11 ++ test/test_atomic/test_atomic.cpp | 54 ++++++++ test/test_atomic/test_atomic.vcxproj | 131 +++++++++++++++++++ test/test_atomic/test_atomic.vcxproj.filters | 22 ++++ test/test_atomic/test_atomic.vcxproj.user | 4 + 5 files changed, 222 insertions(+) create mode 100644 test/test_atomic/test_atomic.cpp create mode 100644 test/test_atomic/test_atomic.vcxproj create mode 100644 test/test_atomic/test_atomic.vcxproj.filters create mode 100644 test/test_atomic/test_atomic.vcxproj.user diff --git a/test/test.sln b/test/test.sln index a389007..6295f4d 100644 --- a/test/test.sln +++ b/test/test.sln @@ -240,6 +240,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_date", "test_date\test EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_logstream", "test_logstream\test_logstream.vcxproj", "{7DC0D84B-7F96-4BB9-9B8A-D86B7B031E61}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_atomic", "test_atomic\test_atomic.vcxproj", "{58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -406,6 +408,14 @@ Global {7DC0D84B-7F96-4BB9-9B8A-D86B7B031E61}.Release|x64.Build.0 = Release|x64 {7DC0D84B-7F96-4BB9-9B8A-D86B7B031E61}.Release|x86.ActiveCfg = Release|Win32 {7DC0D84B-7F96-4BB9-9B8A-D86B7B031E61}.Release|x86.Build.0 = Release|Win32 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Debug|x64.ActiveCfg = Debug|x64 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Debug|x64.Build.0 = Debug|x64 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Debug|x86.ActiveCfg = Debug|Win32 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Debug|x86.Build.0 = Debug|Win32 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Release|x64.ActiveCfg = Release|x64 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Release|x64.Build.0 = Release|x64 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Release|x86.ActiveCfg = Release|Win32 + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -452,6 +462,7 @@ Global {26D2B628-713F-419A-B2E2-32BDFA803E3C} = {21DC893D-AB0B-48E1-9E23-069A025218D9} {2252B5D4-2D13-4F02-8008-AB2E0D38A154} = {D9BC4E5B-7E8F-4C86-BF15-CCB75CBC256F} {7DC0D84B-7F96-4BB9-9B8A-D86B7B031E61} = {D9BC4E5B-7E8F-4C86-BF15-CCB75CBC256F} + {58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F} = {D9BC4E5B-7E8F-4C86-BF15-CCB75CBC256F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A8EBEA58-739C-4DED-99C0-239779F57D5D} diff --git a/test/test_atomic/test_atomic.cpp b/test/test_atomic/test_atomic.cpp new file mode 100644 index 0000000..3844cf1 --- /dev/null +++ b/test/test_atomic/test_atomic.cpp @@ -0,0 +1,54 @@ +#include <atomic> +#include <thread> +#include <chrono> +#include <stdio.h> +#include <assert.h> + +void test() +{ + using namespace std; + using namespace std::chrono; + + uint32_t count = 0; + while (true) { + atomic_int x(0), y(0); + int r1 = 0, r2 = 0; + + thread t1([&x, &y, &r1, &r2]() { + // Thread 1: + this_thread::sleep_for(0ms); + r1 = y.load(memory_order_relaxed); // A + x.store(r1, memory_order_relaxed); // B + }); + + thread t2([&x, &y, &r1, &r2]() { + // Thread 2: + this_thread::sleep_for(0ms); + r2 = x.load(memory_order_relaxed); // C + y.store(42, memory_order_relaxed); // D + }); + + t1.join(); + t2.join(); + count++; + + if (r1 == 42 && r2 == 42) { + break; + } + } + + printf("after %d times trying, r1,r2 are finally 42!\n", count); +} + +int main() +{ + test(); + + + /*{ + std::atomic_int32_t a0; + assert(a0.load() == 0); + assert(a0.fetch_add(1) == 0); + assert(a0.load() == 1); + }*/ +} diff --git a/test/test_atomic/test_atomic.vcxproj b/test/test_atomic/test_atomic.vcxproj new file mode 100644 index 0000000..eaffe3c --- /dev/null +++ b/test/test_atomic/test_atomic.vcxproj @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>16.0</VCProjectVersion> + <ProjectGuid>{58DA7AE8-9975-4F28-A1BF-44A7C01B6F7F}</ProjectGuid> + <RootNamespace>testatomic</RootNamespace> + <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v142</PlatformToolset> + <WholeProgramOptimization>true</WholeProgramOptimization> + <CharacterSet>MultiByte</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="Shared"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup /> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <SDLCheck>true</SDLCheck> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>MaxSpeed</Optimization> + <FunctionLevelLinking>true</FunctionLevelLinking> + <IntrinsicFunctions>true</IntrinsicFunctions> + <SDLCheck>true</SDLCheck> + <ConformanceMode>true</ConformanceMode> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="test_atomic.cpp" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project> \ No newline at end of file diff --git a/test/test_atomic/test_atomic.vcxproj.filters b/test/test_atomic/test_atomic.vcxproj.filters new file mode 100644 index 0000000..ab59cfd --- /dev/null +++ b/test/test_atomic/test_atomic.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> + <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> + <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> + </Filter> + </ItemGroup> + <ItemGroup> + <ClCompile Include="test_atomic.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> +</Project> \ No newline at end of file diff --git a/test/test_atomic/test_atomic.vcxproj.user b/test/test_atomic/test_atomic.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/test/test_atomic/test_atomic.vcxproj.user @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup /> +</Project> \ No newline at end of file -- 2.18.1