문제

나는 어디에서, 어디에 있는지 기억할 수 없지만 C#의 잠금 키워드를 사용하여 할당 할 수 있다는 것을 기억할 수는 없습니다.

ValueType을 잠그려고 시도하는 것은 ValueType을 상자에 올릴 것이지만 다른 상황이 있습니까?

편집하다::

  1. 모두가 ValueType 케이스에 응답하는 것 같습니다. 나는 이미 이것을 알고 있습니다!
  2. 나는 또한 자물쇠가 무엇인지, 그리고 그 자물쇠가 큰 깊이로 사용하는 방법을 알고 있습니다. 모범 사례에 대한 일반적인 조언은 좋지만 쓸모가 없습니다.)
  3. Xbox에 배포를위한 XNA 앱을 구축하기 때문에 알아야합니다. Xbox Garbage Collector는 정말 느립니다. 이것은 할당을 최소, 바람직하게는 존재하지 않는 것으로 보관해야한다는 것을 의미합니다 (수집기가 ever 러닝을 방해하지 않음).
도움이 되었습니까?

해결책

See Sync 블록의 할당은 내부적으로 게으르다 (그러나 IIRC가 Essential.net 'volume 1'에서 알고있는 구현 세부 사항이거나 C#을 통해 CLR입니까? 당신이 제안하는 것처럼 상자에 걸리는 항목이 일어나지 않습니다 - 왜 잠금 (u003Cinteger var> )는 허용되지 않지만 모니터 (참조)u003Cinteger var> ) 허용된?

다른 팁

사용하려는 경우 :

잠금 (this)

인스턴스를보고 있기 때문에 클래스 사용자가 클래스를 잠그고 망칠 수 있음을 알아야합니다. 그것이 문제인지 여부는 사용자가 할 수 있다고 생각하는 것에 달려 있습니다. 당신이하는 경우 같은 상황이 있습니다.

잠금 (typeof (myclass))

이것을하고 싶지 않다면 정적 또는 인스턴스 객체를 쉽게 할당 할 수 있습니다 (예 : Object MyLock = new Object ()).

원천

a 참조 유형 대 값 유형, 이것 그러니 얻을 때 자원을 잠그는 것에 대한 질문 ... 답이 있습니다 :

유형에 따라 다릅니다. 참조 유형이면 예, 값 유형이 아닌 경우. 그렇기 때문에 값 유형이 상자에 걸리기 때문에 값 유형을 잠그지 말아야 할 이유이며, 해당 값을 잠그려는 후속 시도는 실제로 다른 객체에 대한 잠금을 얻습니다.

잠금 문의 정의 :

잠금 진술 (C# 참조)

잠금 키워드는 주어진 객체에 대한 상호 배제 잠금 장치를 얻고 명령문을 실행 한 다음 잠금을 풀어서 명령문 블록을 임계 섹션으로 표시합니다.

이것 C#의 잠금 키워드에 대한 질문 도울 수 있습니다. 당신은 또한 볼 수 있습니다 Lock ()가 허용되지 않지만 Monitor.Enter ()가 허용되는 이유는 무엇입니까?

컴파일러의 사양은 그렇게 자물쇠의 행동:

잠금 문의 표현식의 컴파일 타임 유형은 참조 유형 또는 기준 유형으로 알려진 기준 유형 또는 a 형 파라미터 (§25.1.1)이어야합니다. 값 유형을 나타내는 표현식의 컴파일 시간 유형에 대한 컴파일 타임 오류입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top