我正在阅读一本关于应用 C++ 的关于锁定和设计的书。
void addRef() { ref++; }
void subRef() { if(--ref == 0) delete this; }
尽管像 ref++ 这样的语句看起来微不足道,但不能保证它是原子的。但在您重写此代码以添加锁定之前,您需要知道您的应用程序将如何使用它。在这个特定的示例中,如果在 subRef 之后调用 addRef,则会创建一个错误。问题不在于缺少锁,而是设计不佳。如果一个对象必须在线程范围之外持续存在,则它应该由不会超出范围的不同线程创建和拥有。
我对上述文字的问题是
- 作者所说的糟糕设计是什么意思,以及如何通过“如果一个对象必须在线程范围之外持续存在,它应该由不会超出范围的不同线程创建和拥有”来避免这种情况。? 请求对此举个例子。