Мой вопрос точно касается случая, в котором новая нить B имеет тот же идентификатор, что и старая нить A : увидит ли нить B изменения, внесенные нитью A?
- Таким образом, ваше условие точно соответствует сценарию, когда поток A
обязательно завершается (т. Е. Больше не может быть присоединен), и поток B
запущен, возможно, повторно используя поток A
ID.
в этом случае (потоки A
и B
являются последующими, а не параллельными), assert будет удерживаться - даже если его идентификатор может быть одинаковым, к моменту запуска потока B владелецхранилище будет обязательно очищено (гарантировано завершением потока A
)
ОБНОВЛЕНИЕ: благодаря комментарию @Yakk - Adam Nevraumont
- это был мой упуск из-за операций записи -> чтения при relaxed order
- вышеприведенное утверждение неверно!т.е. фиксация памяти в последней операции потока A
будет асинхронной чтению потока B
, и, следовательно, утверждение может не выполняться!(извините за путаницу)
в противном случае (потоки A
и B
параллельны) они никогда не получат одинаковый идентификатор, и, следовательно, утверждение также будет выполняться.