2010-06-13 2 views

답변

9

귀하의 가정이 유지되면 아무런 문제가 없습니다.

+0

그의 가정이 사실인지 알아내는 것이 문제가되지 않습니까? (그렇지 않을 수도 guffa의 답변을 참조하십시오 : http://stackoverflow.com/questions/3033425/are-simultaneous-reads-of-a-variable-thread-safe/3033439#3033439) – Kris

+0

현재 쓰기가 없습니다 이전의 권한은 경쟁 조건을 만드는 모든 스레드에 아직 표시되지 않을 수 있습니다. 자세한 내용은 내 대답을 참조하십시오. – JaredPar

+1

@Kris, @JaredPar : 충분히 사실이지만 OP의 질문에 대답하고 있습니다. :-) –

0

데이터베이스가 공통적으로 shared read locks을 사용할 수 있다는 점을 고려하면 어떤 클라이언트가 동일한 블록을 읽을 수 있는지 직접적인 문제는 없다고 생각합니다.

0

세자를 입력하십시오.

편집 : 예, 스레드로부터 안전합니다. 아니요, 문제 없습니다. 사람들은 일반적으로 무언가 스레드로부터 안전한지 여부를 묻습니다. 스레드가 안전하지 않은 경우가 아닙니다.

3

일반 변수 인 한 위험하지 않습니다.

속성 인 경우 속성을 읽을 때 부작용이 발생할 수 있으므로 스레드로부터 안전하지 않을 수 있습니다.

7

이 작업은 본질적으로 스레드로부터 안전하지 않습니다.

변수가 현재 쓰여지고 있지는 않지만 변수에 대한 이전 쓰기가 모든 스레드에서 아직 보이지 않을 수 있습니다. 이는 두 스레드가 동일한 값을 읽고 다른 결과를 얻어 경쟁 조건을 생성 할 수 있음을 의미합니다.

이것은 메모리 장벽, 휘발성 또는 다른 몇 가지 메커니즘의 올바른 사용을 통해 예방할 수 있습니다. 우리는 귀하의 환경, 특히 언어에 대해 더 자세히 알아야 완전한 설명을 할 수 있습니다.

질문을 약간 다시 쓰면 더 좋은 답변을 얻을 수 있습니다. 더 이상의 쓰기가없고 모든 이전 쓰기가 현재 스레드에서 볼 수 있다고 가정하면 여러 스레드에서 값을 읽는 것이 안전합니다.

+0

좋은 답변은 휘발성의 사용은 실제로 언어에 따라 다릅니다. c/C++에서 volatile은 명확한 거짓 친구입니다. 생성 된 코드는 컴파일러에 따라 다르므로 휘발성 변수가 실제로 수행해야하는 것을 말하는 표준이 없습니다. – zebrabox

+0

@zebrabox, 매우 사실입니다. 내가 극단적으로 언어 + 플랫폼 특정이기 때문에 나는 그 답변에 조심하려고 노력했다. – JaredPar

관련 문제