안녕하세요!
게임개발자가 되기위해 공부하고 있는 구구입니다.
오늘은 어제에 이어 C#의 쓰레드에 대해 공부하도록 하겠습니다.
- 쓰레드 시작·중단
1. Start
- 쓰레드의 시작
- thread.Start(); // 이때 thread는 Thread 클래스로 만든 인스턴스
2. Abort
- 권장하지 않음
- 함수의 종료를 보장하지 않음
3. Join
- 함수의 종료를 보장
- 동작중인 함수의 끝까지 대기
4. Interrupt
- Abort와 유사
- 쓰레드가 Running상태일때가 아닌(Abort), WainJoinSleep 상태일 때 예외를 던져 쓰레드를 중지시킵니다.
5. Sleep
- 동작중인 쓰레드의 실행을 지정된 밀리초만큼 재움
- thread.Sleep(1000); //밀리초이기 때문에 1000을 넣을 경우 1초 재움
※WaitJoinSleep 과 같은 쓰레드 상태에 대해서는 아래에 언급하도록 하겠습니다.
- 쓰레드 상태(TreadState)
- 쓰레드의 실행 상태를 지정가능
Aborted | 256 | 쓰레드가 취소된 상태. Abort 사용시 발생. 이후 Stopped 상태로 전환됨 |
BackGround | 4 | 쓰레드가 백그라운드로 동작하고 있음. Thread.IsBackGround 속성에 true를 넣으면 스레드를 BackGround 상태로 바꿀 수 있음. 백그라운드는 사라진다고 해서 프로세스에 영향x 하지만 프로세스가 죽으면 백그라운드 쓰레드도 죽음. |
Running | 0 | 쓰레드가 실행 중인 상태. Unstarted상태의 쓰레드를 Thread.Start()메소드로 실행가능. |
Stopped | 16 | 쓰레드 중지. Abort 메소드 호출 or 실행 메소드 종료시의 상태 |
Suspended | 64 | 쓰레드 일시 중단. Thread.Suspend() 메소드를 통해 만들수 있음. Thread.Resume()을 통해서 다시 Running상태로 변경 가능 |
Unstarted | 8 | 쓰레드에서 Start()가 호출되기 전 상태 |
WaitSleepJoin | 32 | 쓰레드가 차단된 상태. Monitor.Enter(), Thread.Sleep(), Tread.Join() 메소드를 호출하면 해당 상태가 됨. |
해당 표는 마이크로소프트 ThreadState 열거형의 자료의 내용을 참고해서 만들었습니다.
더 자세하게 알고싶으면 아래에 주소를 남기겠습니다.
https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.threadstate?view=net-6.0
ThreadState 열거형 (System.Threading)
Thread의 실행 상태를 지정합니다.Specifies the execution states of a Thread.
docs.microsoft.com
- 쓰레드 동기화(Thread Synchronization)
- 데이터나 변수들을 공유하는 경우(2개이상의 쓰레드가)
- lock
- 데드락
- Monitor, Mutex
Lock으로 묶인 부분은 해당 쓰레드가 이 Lock된 부분을 통과할때 다른 쓰레드가 못 실행하도록 해줍니다.
여기서 크리티컬 섹션이라고 언급하였는데 한번에 한 쓰레드만 사용할 수 있는 코드
- Task, Task<TResult>
- 비동기 코드
- Action delegate
- Func delegate
오늘은 여기까지 하도록 하겠습니다.
댓글