2010-04-27 1 views
11

뮤텍스 된 문장을 설명하기 위해 'synchronized'라는 단어를 사용하는 것을 선택하는 것은 단순히 실수라고 들었습니다 (편집 : '실수'는 단어의 나쁜 선택이었습니다. 자바에서 편집을 참조하십시오). 실제로 선택의 이유가 있습니다. Java의 synchronized 키워드가 더 정확한 '뮤텍스 드'대신 '동기화'된 이유는 무엇입니까?

가 [편집] SAFYAN의 의견에 의해 Prodded

, 나는 그 동기화를 추가 할

는 스레드 간의 타이밍 관계를 구축하는 일반적인 용어입니다. 상호 배제와 요금 통제와 같은 것을 포함 할 수 있습니다 (예 : 동일한 속도로 무언가를하는 두 개의 스레드). mutexed와 같은보다 구체적인 키워드 대신 상호 제외를 의미하는 데 'synchronized'를 사용하는 것이 불필요하게 모호한 것으로 나타납니다.

+0

아마도 유용한 참고 자료 : http://stackoverflow.com/questions/1085709/what-does-synchronized-mean –

답변

7

실수가 아닙니다. 그것은 그것이 무엇을 의미 하는지를 의미합니다. 코드는 상호 배타를 제공하기 위해 다른 스레드와 동기화되어야합니다. 실제로 "뮤텍스"는 매우 특정한 유형의 동기화 프리미티브를 의미하기 때문에 synchronized라는 용어는 "뮤텍스"보다 더 적합 할 수 있으며 synchronized 키워드는 임의의 수의 스레드 동기 기본을 사용하여 구현 될 수 있습니다 (테스트 &은 활성 폴링, 세마포어 등).

+0

'뮤텍스'는 '상호 배제'에 대한 일반적인 약어입니다. 특정 언어로 된 원시적 인 이름. –

+1

@Edward, UNIX 및 Windows에서 mutex는 잠금, 잠금 해제 및 trylock을 지원하는 특정 기본 요소입니다. 반면 Java 모니터는 조건 변수의 측면 인 대기 및 통지를 지원합니다. –

+0

@Safyan, 충분히 공평하지만 '동기화'는 일반적으로 작업간에 타이밍 관계를 설정하는 것을 의미합니까? 뮤텍스는 오버로드 된 용어 일 수 있지만 '동기화 된'것보다 명확합니다. –

0

synchronized 키워드는 모니터에서 잠금을 획득하고 해제하는 데 사용됩니다. 뮤텍스와 마찬가지로 모니터는 동시성 제어에 사용되지만 동일하지는 않습니다.

synchronized를 자체적으로 사용하는 것은 실수가 아니지만 멀티 스레딩과 함께 사용하기위한 저수준 구조 일 수 있으며 부적절한 사용으로 인해 멀티 스레딩 오류가 발생할 수 있습니다.

+0

"당신은 스스로 동기화를 사용하고 있습니다." –

+0

고마워, 고쳐 놨어. – mdma

0

mutex 대신 synchronized 키워드를 사용하는 것이 실제로 용어를 표현하는 좋은 방법입니다. 뮤텍스에 의해 우리는 꽤 명확하지 않지만, 동기화 된 키워드 자체는 그것에 대해 알려줍니다. 동기화는 실제로 모든 코드가 액세스하려는 스레드간에 동기화되어야하는 코드에 배치됩니다. 이것이 동기화 된 것입니다.