잔잔이네
article thumbnail

프로세스에서는 한개 이상의 스레드(Thread)를 가지며 실행되는데, 

스레드를 이용하면 한 프로세스에서 동시에 실행하며 처리해준다. 간단하게 예시로 알아보자.

 

1. Thread.Start(); : 스레드 시작

2. Thread.Sleep(); : 스레드 딜레이

 

 


스레드 [Thread]

 

 

 

스레드 적용전 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace _149_NeedThread
{
    internal class Program
    {
        static void Main(string[] args)
        {
            for(int i = 0; i<10; i++)
            {
                Console.WriteLine($"카페에서 책을 읽는다{i}");
                Thread.Sleep(100);
            }

            for(int i = 0; i<10;i++)
            {
                Console.WriteLine($"카페에서 음악을 듣는다{i}");
                Thread.Sleep(100);
            }
        }
    }
}

실행해보면 책을 다 읽고 난 후, 음악을 듣게된다.

 

스레드를 이용하면 책을 읽는 함수를 실행시키면서 동시에 음악을 듣는 함수를 실행시킬 수 있다.

 

 

스레드 적용 후 (메인함수)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace _150_NoParamThread
{
    internal class Program
    {  
        // 새로 배정할 스레드가 동작시키는 함수
        static void ThreadMusic()
        {
            for(int i = 0; i < 10; i++)
            {
                Console.WriteLine($"카페에서 음악을 듣는다{i}");
                Thread.Sleep(200);
            }
            Console.WriteLine("자식 스레드 종료");
        }
        // Main 함수에는 Main 스레드가 자동으로 닷넷에 의해 배정된다/.
        static void Main(string[] args)
        {
            // 스레드를 생성시키는 객체
            Thread t = new Thread(ThreadMusic);
            t.Start(); // 스레드 동작 시작

            for(int i = 0; i<10; i++)
            {
                Console.WriteLine($"카페에서 책을읽는다{i}");
                Thread.Sleep(200);
            }
            Console.WriteLine("Main 스레드 종료");
        }
    }
}

ThreadMusic의 t라는 새로운 스레드 객체를 생성한다.

Thread.Start();는 스레드를 실행하는 함수이다.

Thread t = new Thread(ThreadMusic);
t.Start(); // 스레드 동작 시작

 

 

Thread.Sleep();을 이용하면 스레드의 실행 간격에 딜레이를 줄 수 있다.

Thread.Sleep(200);

 

하지만 실행 결과를 비교해보면 0.2초라는 딜레이를 주었음에도 실행결과가 다르다.

그렇다는것은 만약 어떤 변수를 +1씩 count하는 스레드와 -1씩 count하는 스레드가 동시에 실행될 때 값이 매번 다를 것이다. 이를 방지하기위해 동기화라는 것이 있는데, 나중에 lock이라는 동기화를 하는 방법을 이용하여 다시 보도록 하겠다.

 

profile

잔잔이네

@잔잔잔잔

🌈

검색 태그