I can't understand wired std::atomic_short.load() behavior

I check C++11 std::atomic_short behavior.
I set either 0 or 255 value to atomic_short variable.
But load() say value is neither 0 or 255.
I want atomic variable that one thread write and another thread read.

Environment:
Intel Core i5
OSX 10.11.6
clang (Xcode7.3.1)

#include <iostream> #include <atomic> #include <thread>  std::atomic_short value = ATOMIC_VAR_INIT(0);  void process1() {     bool flag = false;     for (int i = 0; i < 100000; ++i){         std::this_thread::yield;         if (flag){             value.store(255);         } else {             value.store(0);         }         flag = !flag;     } }  void process2() {     for (int i = 0; i < 100000; ++i){         std::this_thread::yield;         if (value.load() != 255 && value.load() != 0){             printf("warningA! %d\n", i);         }     } }  int main(int argc, char** argv) {     value.store(0);     std::thread t1(process1);     std::thread t2(process2);     t1.join();     t2.join();      return 0; } 

warningA! 3 warningA! 1084 warningA! 1093 

Replay

Category: c++11 Time: 2016-07-31 Views: 3
Tags: c++11

Related post

iOS development

Android development

Python development

JAVA development

Development language

PHP development

Ruby development

search

Front-end development

Database

development tools

Open Platform

Javascript development

.NET development

cloud computing

server

Copyright (C) avrocks.com, All Rights Reserved.

processed in 0.200 (s). 12 q(s)