나는 대략적으로 이것을하고 싶다 :
초기 실 :
- 전역 변수에 값을 쓰십시오 (다시 쓰지 않을 것입니다)
- 이것은 약간 큰 데이터 (배열, 문자열 등) 일 수 있습니다. 단순히 만들 수 없습니다
std::atomic<>
.
- 이것은 약간 큰 데이터 (배열, 문자열 등) 일 수 있습니다. 단순히 만들 수 없습니다
- 다른 스레드를 생성
다른 스레드 :
- 세계 상태를 읽다
- 일하는 등
이제 인수를 전달할 수 있다는 것을 알고 std::thread
있지만이 예제를 통해 C ++의 메모리 보장을 이해하려고합니다.
또한 실제 구현에서 스레드를 만들면 메모리 장벽이 발생하여 스레드가 해당 시점까지 상위 스레드가 작성한 모든 내용을 "볼"수 있다는 확신이 있습니다.
그러나 내 질문은 : 이것이 표준에 의해 보장됩니까?
옆으로 : 나는 약간의 더미를 추가 std::atomic<int>
하고 다른 스레드를 시작하기 전에 그 스레드에 쓰고 다른 스레드에서 시작할 때 한 번 읽습니다. 나는 모든 기계류가 이전에 쓰여진 전 세계 상태가 제대로 보이도록 보장 할 것이라고 믿는다.
그러나 내 질문은 이와 같은 것이 기술적으로 필요한지 아니면 스레드 작성으로 충분합니까?
@NathanOliver d' oh. 댓글을 삭제했습니다. 내 질문이 얼마나 어리석은 지에 대해 얼마나 자주 나를 도와 주 었는지 세어 볼 수 없다 ...
—
idclev 463035818
걱정하지 마세요. 그것은 우리 모두에게 일어난다.
—
NathanOliver
std::atomic<int>
... 사용할 수 있습니다std::atomic_thread_fence
.