Do I have to use atomic for “exit” bool variable?

后端 未结 3 507
广开言路
广开言路 2020-12-01 09:09

I need to set a flag for another thread to exit. That other thread checks the exit flag from time to time. Do I have to use atomic for the flag or just a plain bool is enoug

3条回答
  •  离开以前
    2020-12-01 09:42

    Yes, you must have some synchronization. The easiest way is, as you say, with atomic.

    Formally, as @AndyProwl says, the language definition says that not using an atomic here gives undefined behavior. There are good reasons for that.

    First, a read or write of a variable can be interrupted halfway through by a thread switch; the other thread may see a partly-written value, or if it modifies the value, the original thread will see a mixed value. Second, when two threads run on different cores, they have separate caches; writing a value stores it in the cache, but doesn't update other caches, so a thread might not see a value written by another thread. Third, the compiler can reorganize code based on what it sees; in the example code, if nothing inside the loop changes the value of exit, the compiler doesn't have any reason to suspect that the value will change; it can turn the loop into while(1).

    Atomics address all three of these problems.

提交回复
热议问题