728x90
반응형
SMALL
lock은 다중 스레드 환경에서 여러 스레드가 동시에 같은 코드 블록을 실행하지 못하도록 막아주는 기능
즉, lock을 사용하면 한 번에 하나의 스레드만 특정 코드 블록을 실행할 수 있도록 보장하며, 타이머 중복 실행이나 데이터 경합을 방지할 수 있음
lock을 사용하지 않으면 클라이언트 A와 B가 동시에 호출하면 중복되어 실행될 가능성이 있음
// 스레드 A가 lock이 걸린 블록을 실행하는 동안, 스레드 B, C는 실행을 대기
// 스레드 A가 블록을 빠져나가야만 스레드 B 또는 C가 실행 가능
private static readonly object _lock = new object();
public void SomeMethod()
{
lock (_lock) // 하나의 스레드만 실행 가능
{
Console.WriteLine("스레드가 이 블록을 실행 중...");
Thread.Sleep(2000); // 2초 대기 (다른 스레드는 이 블록을 실행하지 못함)
Console.WriteLine("스레드가 블록을 빠져나옴");
}
}
lock을 사용할 때 주의할 점
- lock에 사용할 객체는 static readonly object가 가장 적합
private static readonly object _lock = new object();
- lock 블록 안에는 최소한의 코드만 포함할 것
DB 조회, 파일 I/O 등 시간이 오래 걸리는 작업은 lock 블록 밖에서 실행해야 함
lock을 길게 유지하면 다른 스레드가 오랫동안 대기해야 하므로 성능이 저하될 수 있음
- lock을 과도하게 사용하지 말 것
lock을 과도하게 사용하면 병렬 처리 성능이 저하될 수 있음
동시 실행이 문제되는 경우에만 lock을 사용해야 함
728x90
반응형
LIST
'asp.net' 카테고리의 다른 글
[.net framework] Socket 통신(클라이언트) (0) | 2025.02.18 |
---|---|
[.net framework] Socket 통신(서버) (0) | 2025.02.18 |
[.net] 해싱 알고리즘 SHA-256 (0) | 2024.11.29 |
[.net] SSE(Server-Sent-Event) (0) | 2024.11.29 |
[.net] MvcBuildViews 설정, Web.config 충돌 (0) | 2024.11.20 |