2012-07-20 1 views
0

는 현재이 동작하는 것 같지만 언젠가는거야 : 나는 부울의 2 차원 배열을스레드에 의해 업데이트하면서 부울의 배열을 읽기

, 그 부울는 다양한 개체의 상태를 나타냅니다 (준비가되었거나 처리되지 않은 경우)

개체가 실행되면 스레드가 실행되고 해당 개체를 만드는 것은 "참"(개체를 만드는 데 20 밀리 초가 소요됨)으로 설정됩니다.

내 질문은 : 스레드가 마법을 수행하는 동안

나는이 배열 (읽기 전용) 읽을 수 있습니까? 메서드가 그것을 읽는 동안 스레드가 true를 쓰고 있다면 어떻게 될까요?

감사합니다.

+0

나는 그것이 정말로 당신이 읽는 것을 '신선'한지에 달려 있다고 생각한다. 나는 설명을하려고 애썼지 만,이 두 게시물은 함께 당신의 특정한 상황에 대한 해결책을 이끌어 낼 수도 있습니다. http://stackoverflow.com/questions/2236184/how-to-declare-array-elements-volatile-in-java http://stackoverflow.com/questions/5173614/java-volatile-array –

답변

2

boolean에 대한 쓰기는 원자 적이므로 불일치가 표시되지 않습니다. longdouble의 경우는 그렇지 않습니다.

가장 나쁜 것은 가시성이입니다. 가시성 문제는 한 스레드가 주어진 변수를 업데이트했지만 다른 스레드는 변경 사항을 즉시 (또는 결코) 보지 못할 때 발생합니다.

모든 스레드가 동일한 최신 값을 유지하려면 일종의 동기화 또는 volatile 필드를 사용해야합니다.

+0

Nice, well in my 나는 항상 불협화음을 보지 않을 것이라고 생각합니다. 단 하나의 스레드 만 있습니다. 그의 작업은 디스크에서 RAM으로 데이터를로드하는 것입니다. 데이터 블록이 준비되었거나 사용되지 않으면 주 프로그램 루프가 각주기를 확인합니다. – Eildosa

+0

휘발성 불리언 값 배열을 만드는 전략을 알고 있습니까? 래퍼 클래스의 오버 헤드가 필요합니까? – snapfractalpop

+0

@snapfractalpop : 다른 질문이 아직 없으면 열어주십시오. –

1

스레드가 마술을하는 동안이 배열을 읽을 수 있습니까 (읽기만 가능합니까?)? 내 메서드가 그것을 읽는 동안 스레드가 true를 쓰고 있다면 어떻게 될까요?

네, 글을 쓰려고하면 끈적한 상황에 처하게 될 것입니다. 두 번째 질문은 매우 간단합니다. 불가능합니다. 당신은 변화하고있는 바로 그 순간에 그 색인을 읽을 수 없습니다. 쓰기가 끝날 때까지 기다려서 쓰기 직전의 내용을 읽습니다.

관련 문제