x86에서 같은 배열의 인접한 요소에 동시에 쓰는 두 개의 다른 스레드를 갖는 것이 안전하지 않은 상황은 무엇입니까? 미친 메모리 모델을 가진 DS9K와 같은 일부 아키텍처에서는 워드 찢어짐이 발생할 수 있지만 x86 단일 바이트에서는 주소 지정이 가능하다는 것을 알고 있습니다. 예를 들어, D 프로그래밍 언어 real
은 x86에서 80 비트 부동 소수점 유형입니다.Word에서 단어 찢기
real[] nums = new real[4]; // Assume new returns a 16-byte aligned block.
foreach(i; 0..4) {
// Create a new thread and have it do stuff and
// write results to index i of nums.
}
참고 :이 같은 일을하는 것이 안전 할 것이다 나는이 안전하더라도, 그것은 때로는 성능을 저하로 이어지는, 캐시와 거짓 공유 문제를 일으킬 수 있다는 것을 알고있다. 그러나 유스 케이스의 경우, 필자는이 문제가 실제로 발생하지 않을 정도로 드문 경우가 있음을 염두에 둡니다.
편집 : 작성된 값을 다시 읽지 않아도됩니다. 어떤 값을 읽기 전에 이이 동기화된다는 가정이 있습니다. 나는 을 쓰는 것만으로 안전을 중요하게 생각합니다.
인접한 주소의 더러운 글을보고 있다고 생각하십니까? – BCS