"N명의 유저들이 어떤 희귀 아이템을 얻기위해 눈에 불을 키고 아이템을 찾고있다.
그 유저들은 아이템이 생기면 즉시 한개를 습득한다.
이때 M개의 아이템을 운영자가 뿌렸을때!
서로 같은 아이템을 가져가려고 하다가 충돌이 생기지 않을까?"
라는 고민을 쓰레드를 공부하다가 하게 되었다.
그래서 이와 같은 내용을 구현해보니 아니나 다를까...
아이템을 5개를 생성시켜 줬지만, 로그에는 아이템을 가져간 흔적이 2개밖에 남지 않았다.
이런 일을 막기위해서 다른 쓰레드에서도 사용하는 전역변수 같은 것들을 사용할 때, 잠시 Lock을 해두고 사용해야한다.
사용법은 다음과 같이 매우 간단하다.
// 전역 변수와 같은 방법으로 선언
private Object itemLock = new Object();
// 변수를 사용하기 전에 lock을 하면
// 다른 쓰레드에서 itemLock을 만나면 다른 itemLock이 끝날때까지 기다리게 된다.
lock (itemLock)
{
item = int.Parse(textBox2.Text);
}
Lock을 사용하여 변수를 다루었더니 다움과 같이 잘 작동함!
C# Form을 이용해서 간단히 구현해본 쓰레드 Lock 프로젝트 파일.
'Programming > C# & Unity' 카테고리의 다른 글
C# ?. ?? 연산자 (0) | 2019.10.31 |
---|---|
Visual studio 2017 유니티 디버거 system.reactive.linq.observable 오류 (0) | 2018.07.03 |
Unity UI에 Onclick 넣기 (0) | 2018.03.26 |
유니티 RectTransform (0) | 2018.03.24 |
C# 폼 종료 함수 만들기 (0) | 2018.03.24 |