한 글 은.Net 이 Threading.Mutex 를 바탕 으로 상호 배척 자 물 쇠 를 실현 하 는 것 을 알 게 해 줍 니 다.
6507 단어 .NetThreading.Mutex상호 배척 자물쇠
기초 상호 배척 자물쇠 실현
기본 개념:자 회전 자물쇠 와 마찬가지 로 운영 체제 가 제공 하 는 상호 배척 자물쇠 내부 에 자물쇠 가 가 져 왔 는 지 여 부 를 나타 내 는 수치 가 있 습 니 다.다른 것 은 자 물 쇠 를 가 져 오 는 데 실 패 했 을 때 반복 적 으로 재 시도 하지 않 고 스 레 드 를 대기 상태 에 들 어가 게 하 며 스 레 드 대상 을 잠 금 관련 대기 열 에 추가 합 니 다.다른 스 레 드 가 자 물 쇠 를 풀 때 대기 열 에 스 레 드 대상 이 있 는 지 확인 합 니 다.있 으 면 운영 체제 가 이 스 레 드 를 깨 우 는 것 을 알 립 니 다.잠 금 을 가 져 온 스 레 드 대상 이 실행 되 지 않 았 기 때문에 잠 금 을 오래 풀 지 않 아 도 CPU 자원 이 소모 되 지 않 지만 스 레 드 를 대기 상태 로 들 어가 게 하고 대기 상태 에서 깨 우 는 시간 은 자 회전 잠 금 재 시도 의 나 초 급 보다 길 습 니 다.
windows 와 Liux 의 차이
windows 시스템 에서 상호 배척 자 물 쇠 는 CreateMuteEx 함 수 를 통 해 만 들 고 자 물 쇠 를 가 져 올 때 WaitForMultiple ObjectsEx 함 수 를 호출 합 니 다.자 물 쇠 를 풀 면 ReleaseMutex 함 수 를 호출 합 니 다.스 레 드 가 대기 상태 에 들 어가 고 깨 우 는 것 은 시스템 에서 작 동 합 니 다.
Linux 에서 서로 배척 하 는 잠 금 대상 은 NetCore 의 내부 인터페이스 에서 시 뮬 레이 션 하여 이 루어 집 니 다.그 결과 잠 금 상태 값 과 대기 스 레 드 대기 열 을 포함 하고 모든 위탁 관리 스 레 드 는 pthread 와 연 결 됩 니 다.mutex_t 대상 과 pthreadcond_t 대상,이 두 대상 은 pthread 라 이브 러 리 에서 제공 합 니 다.잠 금 실패 스 레 드 를 가 져 오 면 대기 열 pthread 로 가격 을 조정 합 니 다.cond_wait 함수 가 기다 리 고 있 습 니 다.다른 스 레 드 가 잠 금 을 풀 때 대기 열 에 스 레 드 가 있 는 것 을 보면 pthread 를 호출 합 니 다.cond_signal 함수 각성.
기초 상호 배척 잠 금 코드 실현
public static class MutexDemo
{
private static readonly Mutex _lock = new Mutex(false, null);
private static int _counterA = 0;
private static int _counterB = 0;
public static void IncrementCounters()
{
//
_lock.WaitOne();
try
{
++_counterA;
++_counterB;
}
finally
{
//
_lock.ReleaseMutex();
}
}
public static void GetCounters(out int counterA, out int counterB)
{
_lock.WaitOne();
try
{
counterA = _counterA;
counterB = _counterB;
}
finally
{
//
_lock.ReleaseMutex();
}
}
}
상호 배척 자물쇠(재 귀 자물쇠)기본 개념:Mutex 가 제공 하 는 자 물 쇠 는 다시 들 어 갈 수 있 습 니 다.자 물 쇠 를 가 져 온 스 레 드 는 자 물 쇠 를 가 져 오 는 작업 을 다시 수행 할 수 있 지만 자 물 쇠 를 풀 어 주 는 작업 도 같은 횟수 를 실행 해 야 합 니 다.다시 들 어 갈 수 있 는 자 물 쇠 는 재 귀 자물쇠 라 고도 합 니 다.
실현 원리:재 귀 잠 금 내부 에서 하나의 계수 기 를 사용 하여 진입 횟수 를 기록 하고 같은 스 레 드 는 가 져 올 때마다 1 을 추가 하 며 한 번 풀 면 1 을 줄 이 고 1 을 줄 인 후에 계산기 가 0 이면 진정한 방출 작업 을 수행 합 니 다.재 귀 잠 금 은 하나의 함수 에서 사용 하 는 것 은 의미 가 없 으 며,일반적으로 여러 함수 에 포함 되 어 있다.
코드 구현
public static class MutexRecursionDemo
{
private static Mutex _lock = new Mutex(false, null);
private static int _counterA = 0;
private static int _counterB = 0;
public static void IncrementCountersA()
{
//
_lock.WaitOne();
try
{
++_counterA;
}
finally
{
//
_lock.ReleaseMutex();
}
}
public static void IncrementCountersB()
{
//
_lock.WaitOne();
try
{
++_counterB;
}
finally
{
//
_lock.ReleaseMutex();
}
}
public static void IncrementCounters()
{
//
_lock.WaitOne();
try
{
IncrementCountersA();
IncrementCountersB();
}
finally
{
//
_lock.ReleaseMutex();
}
}
public static void GetCounters(out int counterA, out int counterB)
{
_lock.WaitOne();
try
{
counterA = _counterA;
counterB = _counterB;
}
finally
{
//
_lock.ReleaseMutex();
}
}
}
상호 배척 잠 금(크로스 프로 세 스 사용)기본 개념:Mutex 는 프로 세 스 칭찬 을 지원 합 니 다.생 성 은 구조 함수 의 두 번 째 매개 변수 name 을 통 해 이름 을 입력 합 니 다.이름 은 Walterlv.Mutex 로 시작 할 때 같은 사용자 의 프로 세 스 가 이 이름 을 가 진 자 물 쇠 를 공유 합 니 다.한 프로 세 스에 서 자 물 쇠 를 가 져 오 면 이 자 물 쇠 를 풀 기 전에 다른 프로 세 스 가 같은 이름 의 자 물 쇠 를 가 져 오 려 면 기 다 려 야 합 니 다.프로 세 스 가 자 물 쇠 를 가 져 오 면,그러나 종료 하기 전에 자 물 쇠 를 풀 방법 이 호출 되 지 않 으 면 자 물 쇠 는 자동 으로 풀 리 고 현재 자 물 쇠 를 기다 리 고 있 는 다른 경성 은 Abandoned Mute Exception 이상 을 받 습 니 다.
링크 ux 구현 방식 은 임시 파일 을 통 해 이 루어 집 니 다.
구현 코드
public static class MutexDemo
{
private static Mutex _lock = new Mutex(false, @"Walterlv.Mutex");
private static int _counterA = 0;
private static int _counterB = 0;
public static void IncrementCounters()
{
//
_lock.WaitOne();
try
{
++_counterA;
++_counterB;
}
finally
{
//
_lock.ReleaseMutex();
}
}
public static void GetCounters(out int counterA, out int counterB)
{
_lock.WaitOne();
try
{
counterA = _counterA;
counterB = _counterB;
}
finally
{
//
_lock.ReleaseMutex();
}
}
}
이 코드 는 한 부 만 복사 하면 여러 프로그램 에서 시작 되 며,Mutex Demo.Increment Counters()를 호출 하면 효 과 를 볼 수 있 습 니 다.이 글 에 대해 알 아 보 겠 습 니 다.Net 은 Threading.Mutex 를 바탕 으로 상호 배척 자 물 쇠 를 실현 하 는 글 을 소개 합 니 다.더 많은 관련 이 있 습 니 다.Net 상호 배척 자 물 쇠 는 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NPOI Excel 여러 개를 하나의 Excel로 결합구현 코드 Nuget에서 NPOI 검색 및 설치 NPOI를 사용하여 참조를 추가합니다.HSSF.UserModel;...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.