我的問題實際上是,如果我在另一個線程中寫入變量,然後PostMessage
到Wnd,UI線程中的GetMessage
會與它同步,我可以安全地讀取變量?PostMessage可以在GetMessage之後在UI線程中看到工作線程中變量的變化嗎?
背景是:我想使用PostMessage
從後臺線程更新UI,並擔心數據競爭。我需要其他同步實用程序嗎?
謝謝。
編輯: 標題很混亂,所以改變它。
詳述案例: 假設我想更新一個std::string
,它是一個全局變量。由於我在PostMessage
之前更新了string
,我能否安全地閱讀處理該消息的Window Proc中的string
?
我熟悉C++ 11多線程術語如happens-before
,sequence-before
,synchronize-with
和release-acquire
概念,所以我的問題可以告訴其他的方式:
是否寫string
之前發生的讀?
PS:並且假設這是一次性工作,工作線程不會一次又一次更新string
。
什麼樣的競爭條件是你關心的?由於您發佈到隊列中,消息將自動按收到的方式排序。 –
@haohaolee,讓我糾正你一點。你不應該擔心數據競賽。在你的情況下,你沒有數據競賽。您應該擔心內存讀取/寫入重新排序。 –
@AlexAntonov如果我正確理解你,你的意思是寫入字符串可以在PostMessage後重新排序,對嗎?但我認爲它必須先於它,因爲它序列 - 在PostMessage之前,所有的副作用都應該發生在字符串 – haohaolee