최근에 내 친구 중 누가 단순히 보조 객체를 사용하여 참조하는 객체를 잠 그거나 잠그는 것의 차이점을 스레딩하기 시작했는지 묻습니다. 나는 전혀 몰랐다는 것을 인정해야만했다. 누가 말해 줄 수 있니? 나는 시도하고 코드 조각의 부부와 함께 선보일 예정 :지정한 개체를 잠그고 보조 개체를 잠그는 것의 차이점은 무엇입니까?
첫 번째 방법 :
List<string> data = new List<string>();
object datalock = new object();
void main()
{
lock(datalock)
{
if (data.contains("SomeSearchString"))
{
//Do something with the data and then remove it
}
}
}
두 번째 방법 :
List<string> data = new List<string>();
void main()
{
lock(data)
{
if (data.contains("SomeSearchString"))
{
//Do something with the data and then remove it
}
}
}
상당한 차이가있는 경우, 또는이 개인 코딩 스타일까지입니까? 중요한 차이가 있다면, 누구나 그것이 무엇인지 설명 할 수 있습니까?
다른 질문 [Difference between lock(locker) and lock(variable_which_I_am_using)]을 통해 나왔습니다. 그 대답은 둘 다 동등하다고 암시했지만, 그렇다면 사용하기 가장 좋은 이유는 무엇입니까?
그물 주변에 수많은 예제가 흩어져있는 것을 보았습니다. 첫 번째 방법을 개인적인 선택으로 사용하는 경향이 있지만 두 번째 방법을 사용할 때 얻을 수있는 이점이 무엇인지 궁금합니다.
방금 입력 한 것입니다 ... 내가 추가하려고했던 유일한 것은 기본 객체에 대한 잠금이 수퍼 클래스 잠금 전략에 참여하는 것을 알고있는 하위 클래스가 허용한다는 것이고, 약간 더 많은 유연성을 제공합니다 그러나 그들이하는 일을 모르는 소비자는 추가적인 문제를 야기 할 수 있습니다. –