Я хочу зробити приблизно це:
Початкова нитка:
- запишіть деякі значення у глобальну вару (вони більше ніколи не будуть записані)
- Це можуть бути помірно великі дані (масиви, рядки тощо). Неможливо просто зробити
std::atomic<>
.
- Це можуть бути помірно великі дані (масиви, рядки тощо). Неможливо просто зробити
- нерест інших ниток
Інші теми:
- читати глобальну державу
- робити роботу тощо.
Тепер я знаю, що можу передати аргументи std::thread
, але я намагаюся зрозуміти гарантії пам'яті C ++ на цьому прикладі.
Крім того, я впевнений, що в будь-якій реальній реалізації створення потоку спричинить бар'єр пам’яті, що гарантує, що потік може «бачити» все, що написав батьківський потік до цього моменту.
Але моє запитання: чи це гарантується стандартом?
Убік: я вважаю, що я міг би додати якийсь манекен std::atomic<int>
чи так, і написати до цього, перш ніж запустити інші потоки, а потім на інші теми, прочитайте це один раз під час запуску. Я вважаю, що все, що трапляється раніше, тоді гарантувало б, що раніше написана глобальна держава була належним чином видна.
Але моє запитання, чи потрібно щось подібне технічно, чи достатньо створення ниток?
std::atomic<int>
... Можна використовуватиstd::atomic_thread_fence
.