lock 키워드

대인공·2022년 11월 21일
0

C#

목록 보기
4/5
post-thumbnail

잠금 및 lock

- 멀티쓰레드 환경에서 공유리소스를 보호하는 방법이다.

여러개의 쓰레드가 하나의 리소스에 접근한다면 예기치 못하는 오류가 발생하게 된다.
예를 들면, 어떠한 하나의 쓰레드가 공유리소스를 수정 또는 삭제한다면 해당 공유리소스를 사용하고 있는 다른 쓰레드들에서 오류가 발생하는 경우가 있다.

이때 필요한 키워드가 'lock'키워드 이다.

구조

private object lockObject = new object();

lock(lockObject)
{
	//코드블록
}

- lock키워드를 구현하기 위해서는 Object타입의 객체가 있어야한다.
- '코드블록'의 위치에 공유리소스에 접근하여 작업하는 코드를 작성한다.
- 하나의 쓰레드만 접근하게 만드므로 속도면에서 느려지게 된다. 가능한 범위에서 최소한으로 사용하는게 좋다.

하나의 쓰레드만이 접근 가능한 구조를 베타적 잠금(Exclusive Lock)이라 하고,
여러 쓰레드가 접근 가능하지만 그 수를 정해놓은 구조를 비-베타적 잠금(Non-Exclusive Lock)이라 한다.


베타적 잠금

- 단 하나의 쓰레드만이 리소스에 접근할 수 있다.
- lock키워드, Monitor, Mutex, SpinLock 클래스를 사용하여 구현가능하다.


비-베타적 잠금

- 여러 쓰레드가 접근 가능하지만 그 수를 정해놓아 그 이상은 접근이 불가능 하다.
- Semaphore, SemphoreSlim, ReaderWriterLockSlim 클래스를 사용하여 구현이 가능하다.


profile
이제 막 시작하는 유니티 클라이언트

0개의 댓글