我正在閱讀關於鎖定和設計應用C++的書籍。單線程在多線程中的使用
void addRef() { ref++; }
void subRef() { if(--ref == 0) delete this; }
儘管像裁判聲明++看起來瑣碎,也不能保證 ,它是原子。但是在你去寫這個代碼並添加 鎖之前,你需要知道你的應用程序將如何使用它。在這個 特定示例中,如果addRef在subRef之後被調用,則會創建一個錯誤。 問題不在於缺少鎖,而是糟糕的設計。如果對象 必須持續超出線程範圍,則應該通過不會超出範圍的其他線程創建並擁有 。
我上面的文字問題是
- 是什麼筆者糟糕的設計意味着以及如何這是由「如果一個對象必須持續超過一個線程的範圍內避免,應創建並擁有一個不會超出範圍的不同線程。「 ?請求舉一個例子。
'std :: atomic'也可以。但是'刪除這個'無論如何都是可怕的 - 對象內的參考計數器有什麼好處? – nijansen
爲什麼你在問題標題中提到單身人士,而在你的實際問題中沒有任何關係? –