2012-06-09 3 views
1

원자 적으로 카운터를 늘리고 뮤텍스를 획득하는 방법이 없다는 가정에서 시작하여 대기중인 스레드의 수를 읽을 수있는 멀티 스레딩 라이브러리가 있습니까? 뮤텍스?뮤텍스를 기다리는 스레드 수를 얻으십시오.

+0

수에 대기 뮤텍스 (mutex)는 일반적으로 유용하지 않습니다. 왜냐하면 그러한 함수가 어떤 값을 반환했는지에 상관없이, 정보를 조작 할 때까지는 잘못된/오래된 것일 수 있습니다 (즉, 새 스레드가 뮤텍스를 즉시 획득하려고 시도 할 수 있습니다. 당신은 함수를 호출했습니다). 즉, 뮤텍스가 잠겨 있지 않은 경우 뮤텍스를 잠그는 try_lock() 메서드가 있거나 mutex가 현재 잠겨 있는지 여부를 알려주는 예외가 있습니다. –

+0

@JeremyFriesner 그것은 더 많은 종류의 호기심이었다. 뮤텍스가 실제로 조건이고 관리자 스레드가 그러한 조건에 관심있는 다른 스레드가 있는지 알고 싶다면 어떻게 든 유용 할 수 있습니다. –

+0

"라이브러리"라고하지는 않지만 "디버거"입니다. 실행중인 모든 스레드를 정지시키기 위해 의존 할 수있는 유일한 종류의 소프트웨어로 결과가 실제로 의미가 있으며 1 초 안에 쓸모이게 없습니다. –

답변

0

나는 어떤 프로그래밍 언어로 당신이 코딩 모르겠지만, 당신은 차단하지 않고 개체에 대한 try to get an exclusive lock 할 수있는 C#을 그렇게 당신의 뮤텍스의 구현은 다음과 같습니다 스레드의

class MyMutex 
{ 
    public int LockedThreadsCount 
    { 
     get { lock (countLock) { return waitingThreads; } } 
    } 

    public void WaitOne() 
    { 
     if (!Monitor.TryEnter(mainLock)) 
     { 
      lock (countLock) { waitingThreads++; } 
      Monitor.Enter(mainLock); 
      lock (countLock) { waitingThreads--; } 
     } 
    } 

    public void Release() 
    { 
     Monitor.Exit(mainLock); 
    } 

    private int waitingThreads = 0; 
    private object countLock = new object(); 
    private object mainLock = new object(); 
} 
관련 문제