我想讓「原子vs非原子」的概念在我腦海中解決。我的第一個問題是我找不到「現實生活中的比喻」。像客戶/餐廳關於原子操作或類似的東西。原子操作會阻止其他線程嗎?
另外我想了解一下原子操作是如何將自己置於線程安全編程的。
在這篇博文中, http://preshing.com/20130618/atomic-vs-non-atomic-operations/ 它被提及爲:作用於共享存儲器
的操作是原子的,如果它在 單一步驟相對於其他線程完成。 當原子存儲位於一個共享變量進行 ,沒有其他的線程能夠觀察 修改完成一半。當在一個 共享變量上執行原子加載時,它會讀取整個值,因爲它在單個時間點出現。非原子加載和存儲不保證這些 。
「沒有其他線程可以觀察到修改半完成」是什麼意思?
這意味着線程將等待原子操作完成?那個線程怎麼知道這個操作是原子的?例如在.NET中,我可以理解你是否鎖定了設置標誌的對象以阻止其他線程。但是原子呢?其他線程如何知道原子操作和非原子操作之間的區別?
另外,如果上述語句爲真,那麼所有的原子操作都是線程安全的嗎?
請不要公佈答案添加到您的問題。這將打破問答格式,並使其不易讀。換句話說,答案不屬於問題。謝謝。 – 2501