1
원자 적으로 카운터를 늘리고 뮤텍스를 획득하는 방법이 없다는 가정에서 시작하여 대기중인 스레드의 수를 읽을 수있는 멀티 스레딩 라이브러리가 있습니까? 뮤텍스?뮤텍스를 기다리는 스레드 수를 얻으십시오.
원자 적으로 카운터를 늘리고 뮤텍스를 획득하는 방법이 없다는 가정에서 시작하여 대기중인 스레드의 수를 읽을 수있는 멀티 스레딩 라이브러리가 있습니까? 뮤텍스?뮤텍스를 기다리는 스레드 수를 얻으십시오.
나는 어떤 프로그래밍 언어로 당신이 코딩 모르겠지만, 당신은 차단하지 않고 개체에 대한 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();
}
수에 대기 뮤텍스 (mutex)는 일반적으로 유용하지 않습니다. 왜냐하면 그러한 함수가 어떤 값을 반환했는지에 상관없이, 정보를 조작 할 때까지는 잘못된/오래된 것일 수 있습니다 (즉, 새 스레드가 뮤텍스를 즉시 획득하려고 시도 할 수 있습니다. 당신은 함수를 호출했습니다). 즉, 뮤텍스가 잠겨 있지 않은 경우 뮤텍스를 잠그는 try_lock() 메서드가 있거나 mutex가 현재 잠겨 있는지 여부를 알려주는 예외가 있습니다. –
@JeremyFriesner 그것은 더 많은 종류의 호기심이었다. 뮤텍스가 실제로 조건이고 관리자 스레드가 그러한 조건에 관심있는 다른 스레드가 있는지 알고 싶다면 어떻게 든 유용 할 수 있습니다. –
"라이브러리"라고하지는 않지만 "디버거"입니다. 실행중인 모든 스레드를 정지시키기 위해 의존 할 수있는 유일한 종류의 소프트웨어로 결과가 실제로 의미가 있으며 1 초 안에 쓸모이게 없습니다. –