비교적 사소한 질문이지만 공식 문서 나 블로그 의견 / 토론을 찾을 수 없었습니다.
간단히 말해서 : private을 제공하는 것이 유일한 목적인 개인용 객체가있을 때 lock
그 객체의 이름은 무엇입니까?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
여기서 무엇을 명명해야 LockingObject
합니까? 또한 변수 이름뿐만 아니라 잠금시 코드가 어떻게 보이는지 고려하십시오.
다양한 예를 보았지만 확실한 조언은 없습니다.
많은 사용법
SyncRoot
(과 같은 변형_syncRoot
).- 코드 샘플 :
lock(SyncRoot)
,lock(_syncRoot)
- 이것은 VB의 동등한
SyncLock
문장,SyncRoot
일부 ICollection 클래스 및 SyncRoot 디자인 패턴의 일부에 존재 하는 속성에 의해 영향을받는 것으로 보입니다 (이것은 나쁜 생각입니다) - C # 컨텍스트에 있기 때문에 VBish 명명을 원할지 확실하지 않습니다. 더 나쁜 것은 VB에서 변수 이름을 키워드와 동일하게 지정하는 것입니다. 이것이 혼란의 원인인지 확실하지 않습니다.
- 코드 샘플 :
thisLock
및lockThis
MSDN 문서에서 : C # 잠금 문 , VB의 SyncLock 문- 코드 샘플 :
lock(thisLock)
,lock(lockThis)
- 이것들이 예제를 위해 최소한으로 이름을 지 었는지 확실하지 않습니다
- 우리가 이것을
static
클래스 / 메서드 에서 사용한다면 이상합니다 . - 편집 : 잠금 에 대한 Wikipedia 기사 는 예제 에이 이름 지정을 사용합니다.
- 코드 샘플 :
PadLock
(다양한 케이스의) 여러 용도- 코드 샘플 :
lock(PadLock)
,lock(padlock)
- 나쁘지 않지만 내 유일한 쇠고기는 의심 할 여지 없이 추상 스레딩 개념 과 관련이없는 실제 "자물쇠" 의 이미지를 불러옵니다 .
- 코드 샘플 :
잠 그려는 의도에 따라 자물쇠 이름 지정
- 코드 샘플 :
lock(messagesLock)
,lock(DictionaryLock)
,lock(commandQueueLock)
- VB SyncRoot MSDN 페이지 예제
simpleMessageList
에는 개인messagesLock
오브젝트 가있는 예제가 있습니다. - 변경하려는 구현 세부 사항이므로 잠그는 유형 ( "DictionaryLock")에 대해 잠금의 이름을 지정하는 것은 좋은 생각이 아닙니다. 잠그는 개념 / 개체 ( "messagesLock"또는 "commandQueueLock")의 이름을 선호합니다.
- 흥미롭게도 코드 샘플의 온라인 또는 StackOverflow에서 객체를 잠그는이 명명 규칙은 거의 볼 수 없습니다 .
- 코드 샘플 :
(EDIT) "8.12 The Lock Statement"섹션의 C # 스펙에는이 패턴의 예가 있으며 이름은
synchronizationObject
- 코드 샘플 :
lock(SynchronizationObject)
,lock(synchronizationObject)
- 코드 샘플 :
질문 : 개인 잠금 개체의 이름을 지정하는 것에 대한 일반적 의견은 무엇입니까 ?
최근에 나는 그것들의 이름을 짓기 시작했습니다 ThreadLock
(옵션 3과 비슷합니다).하지만 그 이름에 의문을 품고 있습니다.
응용 프로그램 전체에서이 잠금 패턴 (위에 제공된 코드 샘플에서)을 자주 사용하므로 견고한 명명 규칙에 대한보다 전문적인 의견 / 토론을 얻는 것이 합리적이라고 생각했습니다. 감사!
SynchronizationContext
상당히 혼란 스럽기 때문에 혼란 스럽습니다 .