본문 바로가기

진리는어디에

[Unity] 지금 동작하는 스레드가 메인 스레드인지 확인하는 방법

유니티로 싱글 스레드 기반 서버를 만들고 있는 중이다. 싱글 스레드 기반이라고 하더라도 성능을 위해서는 멀티 스레드를 완전히 배제하고 만들 수는 없다. 네트워크 IO라던지, 비동기 작업을 할 때는 멀티 스레드에서 작업을 하다가 완료가 되면 다시 메인 스레드에서 재개하는 방식으로 만들어야 한다.

하지만 어떨 때는 현재 구동되고 있는 코드가 메인 스레드에서 돌아가고 있는 것인지 다른 백그라운드 스레드에서 돌아가고 있는 것인지 확인해야 할 필요가 있다.

여기서 현재 실행 중인 스레드를 나타내는 Thread.CurrentThread 속성을 이용하여 현재 코드가 구동되고 있는 스레드가 메인 스레드인지 체크하는 예제 코드를 소개 하도록하겠다. 

방식은 간단하다. Start 메소드와 같이 메인 스레드에서 구동되는 곳에서 Thread.CurrentThread 속성을 이용해 메인스레드를 저장해 놓은뒤 체크가 필요한 곳에서 다시 Thread.CurrentThread 속성과 비교해보면 된다.

using System.Threading;
using UnityEngine;

public class MainThreadTest : MonoBehaviour
{
    static Thread mainThread = Thread.CurrentThread;
    
    // Use this for initialization
    void Start ()
    {
        mainThread = System.Threading.Thread.CurrentThread;
    }

    bool isMainThread(){
        return mainThread.Equals(System.Threading.Thread.CurrentThread);
    }
    
    void SomeWork()
    {
        if(false == isMainThread())
        {
            Debug.LogWarning("This is not the main thread.");
        }
    }
}

필자의 경우는 위 코드를 특정 메소드들이 동기화 이슈로 인해 메인 스레드에서만 호출 되어야 하는데 혹시 백그라운드 스레드들에서 호출 되는 곳이 있는지 체크하기 위해 사용 했다.

부록 1. 같이 보면 좋은 글

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!