멀티 스레드 용 블랙 박스 래퍼 (TBB 스레드 풀 위에 위치하는 것으로 의심되는)를 사용해야하는 경우가 있습니다.동일한 데이터를 동일한 값으로 설정하기 위해 여러 스레드가 경쟁합니다
값 비싼 생성자가있는 객체에서만 얻을 수있는 값이 있으며 각 스레드에는 로컬 인스턴스가 필요하며 이는 괜찮습니다. 해당 객체는 스레드간에 항상 동일한 값을 생성합니다 (모든 생성자는 주 루프와 동일한 const 형성 인수를가집니다). 각 스레드는 또한 해당 인수에 대한 공유 구조체에 액세스 할 수 있으며 일부 결과를 저장할 수 있습니다.
스레드에서 필요로하는 값 (unsigned int 형태의 반복 범위)은 나중에 메인 루프에서 사용됩니다. 그렇다면 위에서 언급 한 객체의 또 다른 값 비싼 인스턴스를 생성 할 수 있습니다. 그 같은 가치를 다시 얻으려면.
내 질문에, Windows에서 VC11 및 GCC 4.8.2, x86-64, 동일한 메모리 위치 (스레드가 포인터가있는 구조체의 int)에 동일한 값을 쓰고 있습니다. 양성 인종? 값 비싼 잠금 장치로 가치를 지키지 않고 그냥 내버려 둘 수있는 경주인가? 단순한 테스트에서 볼 수 있듯이, 작업이 원자 적이며 안전한지, 스트레스를받을 가능성이있는 손상 여부가 확실하지 않습니다.
[std :: atomic] (http://en.cppreference.com/w/cpp/atomic/atomic)은 당신을위한 해결책이 될 수 있습니까? – stefaanv
필자는 스핀 락이나 원자 속성을 사용하여 잠재적 인 문제를 선점 할 수는 있지만 확실한 것은 내 이익과 미래를 위해 필자가 지적한 값 설정을 경주하는 것이 안전한지 아니면 양성인지를 알고 싶습니다. 프린지 또는 스트레스 사례에 대해 잘 모릅니다. 나는 그것이 플랫폼 의존적 인 문제라고 보통 알고 있지만, 나는 단지 플랫폼에 대해서만 언급했다. 관심을 가져 주셔서 감사합니다. –
블랙 박스 래퍼를 사용한다고하셨습니다. 스레드가 상호 작용하지 않고 구조에 대한 잠금 메커니즘을 이미 가지고 있는지 확인합니까? – ollo