C# 쓰레드 2
본문 바로가기
  • 게임 개발자가 되고싶은 구구
게임 개발 공부/C#

C# 쓰레드 2

by gugu99 2021. 12. 27.
반응형

안녕하세요!

 

게임개발자가 되기위해 공부하고 있는 구구입니다.

오늘은 어제에 이어 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 과 같은 쓰레드 상태에 대해서는 아래에 언급하도록 하겠습니다.

 

 

 

 

C#-쓰레드-thread-start-abort-join-interrupt-sleep
C#-쓰레드-thread-start-abort-join-interrupt-sleep
C#-쓰레드-thread-start-abort-join-interrupt-sleep


  • 쓰레드 상태(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

 

 

 

 

 

 

 

 

 

 

 

오늘은 여기까지 하도록 하겠습니다.

반응형

'게임 개발 공부 > C#' 카테고리의 다른 글

C# 단축키 정리  (0) 2022.01.10
C# 쓰레드 1  (0) 2021.12.26
C# 파일처리  (0) 2021.12.25
C# LINQ  (0) 2021.12.24
C# 람다식  (0) 2021.12.23

댓글