0
在給出用例的情況下,我的印象是WinRT對象的引用計數是線程安全的。但是我遇到了一個我不知道解決問題的錯誤。例如,下面的代碼崩潰相當快:C++/CX WinRT指針的引用計數的線程安全性
ref class C sealed {
public:
C() { }
virtual ~C() {}
};
[Windows::Foundation::Metadata::WebHostHidden]
public ref class MainPage sealed {
public:
MainPage() : _latest(nullptr) {
InitializeComponent();
Windows::System::Threading::ThreadPool::RunAsync(
ref new Windows::System::Threading::WorkItemHandler(
this,
&MainPage::SetLatest));
Windows::System::Threading::ThreadPool::RunAsync(
ref new Windows::System::Threading::WorkItemHandler(
this,
&MainPage::OnRendering));
}
virtual ~MainPage(){}
private:
C^ _latest;
void SetLatest(Windows::Foundation::IAsyncAction^ operation){
while (true) {
_latest = ref new C();
}
}
void OnRendering(Windows::Foundation::IAsyncAction^ operation) {
while (true) {
auto c = _latest;
}
}
};
是WinRT的指針(即,像C^
一個引用類型)應該被正確地引用計數時的讀/寫操作都在競相?有沒有我不知道的一個單獨的問題,導致這次崩潰?
那麼解釋它。你能鏈接到文檔說明這一點? –
記錄哪個部分? 'ref class'是一個COM類的類型,因此必須遵循所有的COM線程規則。 'T ^'與其他需要外部同步的類型沒有區別。 –