1. 程式人生 > >C++中的原子操作和原子型別

C++中的原子操作和原子型別

    原子操作是個不可分割的操作。 在系統的所有執行緒中, 不可能觀察到原子操作完成了一半的情況:它要麼就是做了, 要麼就是沒做, 只有這兩種可能。 如果從物件讀取值得載入操作是原子的, 而且對這個物件的所有修改操作也是原子的, 那麼載入得到的值要麼是物件的初始值, 要麼是某次修改操作存入的值。

    另一方面, 非原子操作可能會被另一個執行緒觀察到只完成一半。 如果這個操作是一個儲存操作, 那麼其他執行緒看到的值, 可能既不是儲存前的值, 也不是儲存的值, 而是別的什麼值。 如果這個非原子操作是一個載入操作, 他可能先取到物件的一部分, 然後值被另一個執行緒修改, 然後它再取到剩餘的部分, 所以他取到的不是第一個值, 也不是第二個值, 而是兩個值的組合。