>

잠금을 놓을시기와 장소에 대해 개발자가 따라야 할 지침이 있는지 알고 싶습니다.

예를 들어 : 다른 스레드가 SomeHeapValue의 값을 예기치 않게 변경하지 못하도록하기 위해 이와 같은 코드를 잠 가야한다는 것을 알고 있습니다.

class Foo
{
  public SomeHeapObject myObject;
  public void DoSummat(object inputValue_)
  {
    myObject.SomeHeapValue = inputValue_;
  }
}

그러나 내 질문은 잠금에 얼마나 깊이 들어가는가? 예를 들어 다음 코드가있는 경우 :

class Foo
{
  public SomeHeapObject myObject;
  public void DoSummat(object inputValue_)
  {
    myObject.SomeHeapValue = GetSomeHeapValue();
  }
}

DoSummat (...) 메소드를 잠글까요 아니면 GetSomeHeapValue () 메소드를 잠글까요?

멀티 스레드 코드를 작성할 때 모두 염두에 두어야 할 지침이 있습니까?

  • 답변 # 1

    내가 찾은 잠금 및 스레딩에 대한 가장 좋은 가이드는이 페이지입니다 (이것은 잠금 및 스레딩 작업시 참조하는 텍스트입니다).

    http://www.albahari.com/threading/

    여기서 "잠금 및 스레드 안전"단락을 원하지만 나머지 내용도 잘 읽어보십시오.

  • 답변 # 2

    가능한 한 적게, 필요한만큼만 잠그십시오.

    가능한 경우 잠금을 피하십시오-.NET 4.0에는 컨텍스트 전환을 유발하지 않는 대안이 있습니다.

    여러 번 잠그지 마십시오. 이에 따라 API를 구성하십시오. 예를 들어 대기열입니다. DeQueue-하나의 잠금으로 많은 항목을 대기열에서 제거 할 수있는 대체 DeQueue (int amount)를 만듭니다.

  • 이전 css - Less에서 다른 요소 값을 얻는 방법이 있습니까?
  • 다음 c++ - 람다로 이동