[설계 원칙과 제안] lock

4979 단어 Lock
lock 예.net에서 가장 자주 사용하는 자물쇠
lock 메커니즘, 인용 유형, 값 유형, 문자열과 응용 프로그램 영역을 알고 있는 분들은 다음과 같은 내용에 익숙하실 수 있습니다.
1. 추천하는 lock 코드부터 살펴보기
    class LockDemo
{
private static object asyncLock = new object();// static object
public static void Test()
{
lock (asyncLock)//
{
//
}
}

private object asyncLock2 = new object();// object
public void Test2()
{
lock (asyncLock2)//
{
//
}
}
}

2. lock 대상이 null이 되지 않도록 하십시오
            object o = null;
lock (o)// o null
{
}

3. 클래스 자체가 퍼블릭이라면 클래스 내부에서 lock(this)을 절대 사용하지 마십시오.
  • 외부로부터lock이 가능하다는 실례
  • 4. myType에 대한 공개 액세스가 있을 경우 lock(typeof(MyType) 금지
    5. lock(typeof(int) 금지, 모든 기본 유형도 일치
    6. lock("string") 엄금
    7. lock 값 형식을 엄금합니다(예를 들어 lock(int)...자동으로 포장됩니다. (모니터 엔터테인먼트에서만 시뮬레이션할 수 있고 편집기에서 lock (int) 를 막을 수 있습니다.
    8. 필요할 때 코드 중복 실행 방지 이중 검사
            private static bool condition = true;
    public static void Test3()
    {
    if (condition)
    {
    lock (asyncLock)// CLR ,
    {
    if (condition)
    {
    condition = false;
    }
    }
    }
    }

    9.lock의 기본적 실현, 모두들 잘 알고 있을 것이다
     object o = new object();
    Monitor.Enter(o);
    try
    {
    //
    }
    finally
    {
    Monitor.Exit(o);
    }

    10. CLR 중 두 가지 자물쇠가 내부 핵에 들어가지 않을 수 있다. 하나는 자전거 자물쇠이고 다른 하나는 lock이다. 이 두 가지 속도는 모두 비교적 빨라서 시간이 짧은 잠금에 적합하다(내부 핵에 들어가는 자물쇠라면 적어도 30ms이다)
  • 어떤 친구가 lock이 혼합 모드라고 지적했는데 검증 중...

  • 11.lock프로그래밍을 사용하는 것이 간단하고 읽기와 쓰기 자물쇠, 신호량 등 사용이 편리하다
    12. 성능과 프로그래밍 때문에 lock을 사용하지 않는 경우도 있다
  • 간단한 조작은 Interlocked 클래스가 자체로 가지고 있는 일부 조작
  • 단시간 잠금, 자전거 잠금 속도
  • 가능하면 lock이 없는 코드를 우선적으로 사용합니다. 예를 들어.net에 추가된 라인 보안 집합 클래스
  • 적당할 때 lock 대신 읽기와 쓰기 자물쇠를 사용합니다
  • 장시간 잠금은 신호량을 고려하는 방안(예를 들어 비동기 IO 조작)
  • 13. 일부 클래스 자체는 잠금을 위한 대상을 제공했다
  • Hashtable.SyncRoot 

  • 일부 컨텐트는 MSDN 및 기타 타사 기사에서 참조됨
    본인의 수준에 한계가 있으므로, 누락이나 오류가 있으면, 고수 여러분의 지적을 바랍니다.

    좋은 웹페이지 즐겨찾기