LINUX.ORG.RU

История изменений

Исправление dvetutnev, (текущая версия) :

У каждого потока копия shared_ptr на экземпляр Q (в функцию th_fn указатель передается по значению), пока жива хотя бы одна копия объект будет жив. Декремент счетчика в shared_ptr , выполняется с семантикой release, соответственно вызов q->incr() не может быть перепланирован позже атомарного декремента в shared_ptr, если точнее соседние потоки никогда не увидят инкремент в Q позже декремента счетчика в shared_ptr. Хотя для этого сферического в вакууме примера это значения не имеет, все равно никто не использует экземпляр Q после разрушения локальной копии shared_ptr в каждом треде.

Прикрывать мьютексом обращения к полям (в данном случаи только инкремент) в Q - да, прикрывать мютексом (что?) в деструкторе - нет.

Исходная версия dvetutnev, :

У каждого потока копия shared_ptr на экземпляр Q (в функцию th_fn указатель передается по значению), пока жива хотя бы одна копия объект будет жив. Декремент счетчика в shared_ptr , выполняется с семантикой release, соответственно вызов q->incr() не может быть перепланирован позже атомарного декремента в shared_ptr, если точнее соседние потоки никогда не увидят инкремент в Q позже декремента счетчика в shared_ptr. Хотя для этого сферического в вакууме примера это значения не имеет, все равно никто не использует экземпляр Q после локальной разрушения копии shared_ptrв каждом треде.

Прикрывать мьютексом обращения к полям (в данном случаи только инкремент) в Q - да, прикрывать мютексом (что?) в деструкторе - нет.