Здравствуйте, eao197, Вы писали:
R>>И ещё есть такой трюк малоизвестный, но прикольный. Он ещё один декремент уберёт.
R>>Допустим у тебя есть код:
R>>R>>if (0 == atomic_dec(obj->ref_count))
R>> delete obj;
R>>
R>>Его можно заменить на равноценный:
R>>R>>if (1 == obj->ref_count)
R>> delete obj;
R>>else if (0 == atomic_dec())
R>> delete obj;
R>>
R>>При такой модели владения, как здесь используется, такая замена безопасна.
R>>Получается, если этот объект последний держит ссылку и он об этом знает, или он единственный и держал, то атомарный декремент можно не делать, а сразу удалять объект.
E>Как-то пока мне это кажется подозрительным. Я покурю эту тему еще.
Смотри
здесь по поводу этого трюка. Эксперты сошлись на том, что это безопасно для нормальной модели потоко-безопастности (это когда ты можешь увеличивать reference counter, только когда ты владеешь объектом, т.е. уже до этого один раз увеличивал reference counter), как раз то, что в SObjectizer.
R>>
E>