본문 바로가기
반응형

Lock3

C# 멀티스레드 프로그래밍 커스텀 재귀적 락과 스핀락 정책 구현 C# 멀티스레드 프로그래밍 커스텀 재귀적 락과 스핀락 정책 구현재귀적 락과 스핀락이란?재귀적 락재귀적 락은 동일한 스레드가 이미 소유한 락을 다시 획득할 수 있는 락입니다. 재귀적 락이 없다면, 동일한 스레드가 중첩된 호출에서 동일한 락을 다시 획득하려 할 때 데드락이 발생할 수 있습니다.스핀락스핀락은 잠금을 시도하는 스레드가 일정 횟수만큼 바쁜 대기(spin) 상태를 유지하면서 잠금을 재시도하는 락입니다. 바쁜 대기 중에는 컨텍스트 스위칭이 발생하지 않으므로, 락이 곧 해제될 것으로 예상되는 경우 스핀락을 사용하면 성능을 향상시킬 수 있습니다. 스핀 횟수가 일정 수를 초과하면 Thread.Yield()를 호출하여 CPU를 양보합니다.코드 분석아래는 재귀적 락과 스핀락 정책을 사용하여 커스텀 락을 구현한.. 2024. 7. 1.
C# 멀티스레딩에서 안전한 공유 자원 관리를 위한 임계영역과 Lock 사용법 C# 멀티스레딩에서 안전한 공유 자원 관리를 위한 임계영역과 Lock 사용법예제 코드 소개아래의 예제 코드는 두 개의 스레드가 number 변수를 각각 증가 및 감소시키는 방식으로 동작합니다. 그러나 동시 접근으로 인해 number 값이 예상과 다르게 나올 수 있습니다.class Program{ static int number = 0; static void Thread_1() { for (int i = 0; i 1. 임계영역 (Critical Section)임계영역은 동시에 접근해서는 안 되는 공유 자원에 접근하는 코드 영역입니다. 임계영역은 한 번에 하나의 스레드만 접근할 수 있도록 해야 합니다. 위 예제에서 number 변수에 대한 접근이 임계영역에 해당합니다.2. 상호배.. 2024. 7. 1.
멀티스레딩에서 발생하는 메모리 재정렬 현상과 해결 방법 멀티스레딩에서 발생하는 메모리 재정렬 현상과 해결 방법예제 코드 소개아래의 예제 코드는 두 개의 스레드가 각각 x와 y 변수를 설정하고, 다른 변수인 r1과 r2에 값을 할당하는 방식으로 동작합니다. 코드를 여러 번 실행해 보면, r1과 r2 값이 동시에 0이 되는 경우가 발생할 수 있습니다.class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread_1() { y = 1; r1 = x; } static void Thread_2(.. 2024. 7. 1.
반응형