C# - ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (์Šค๋ ˆ๋“œ)

2020. 11. 27. 20:07ใ†์ „๊ณต ๊ณผ๋ชฉ/์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

C# - ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (์Šค๋ ˆ๋“œ)

 

์Šค๋ ˆ๋“œ

- ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ œ์–ด์˜ ๋‹จ์ผ ์ˆœ์ฐจ ํ๋ฆ„.

 

๋‹จ์ผ ์Šค๋ ˆ๋“œ vs ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

 

- ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋Š” ํž™, ๊ณต์œ ๋ฐ์ดํ„ฐ, ์ฝ”๋“œ, ์Šคํƒ, ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ตฌ์กฐ์ด๊ณ ,

  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ํž™, ๊ณต์œ ๋ฐ์ดํ„ฐ, ์ฝ”๋“œ, ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํ•˜๋‚˜์ง€๋งŒ, ์Šคํƒ์ด ์—ฌ๋Ÿฌ๊ฐœ์ด๋ฉฐ ์ƒํƒœ์ •๋ณด๊ฐ• ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์Šค๋ ˆ๋“œ ์˜ˆ์ œ

using System;
using System.Threading;


class SimpleThreadApp {
    static void ThreadBody()
    {
        for (int i =0; i<5; i++)
        {
            Console.WriteLine(DateTime.Now.Second+":" +i);
            Thread.Sleep(1000);
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            ThreadStart ts = new ThreadStart(ThreadBody);
            Thread t = new Thread(ts);
            Console.WriteLine("***Start of Main");
            t.Start();
            Console.WriteLine("***End of Main");
        }
    }

}

 

 

๊ฒฐ๊ณผ ํ™”๋ฉด

- Sleep์€ ์ง€์ •ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. 1000์ด๋ฉด 1์ดˆ์ด๋‹ค.

- ์Šค๋ ˆ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ System.Threading์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

์Šค๋ ˆ๋“œ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๊ทธ ์ค‘์—์„œ๋„ Thread.Name์€ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํผํ‹ฐ ์ด๋ฏ€๋กœ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ค„๋ณด์ž.

 

using System;
using System.Threading;


class ThreadProperty {
    public void ThreadBody()
    {
        Thread myself = Thread.CurrentThread;
        for (int i = 1; i <= 3; i++)
        {
            Console.WriteLine("{0} is activated => {1}", myself.Name, i);
            Thread.Sleep(1000);
        }
    }
   }
    public class Program
    {
        public static void Main(string[] args)
        {
        ThreadProperty obj = new ThreadProperty();
        ThreadStart ts = new ThreadStart(obj.ThreadBody);
        Thread t1 = new Thread(ts);
        Thread t2 = new Thread(ts);
        t1.Name = "Apple"; t2.Name = "Orange";
        t1.Start(); t2.Start();
    }
    
}

 

๊ฒฐ๊ณผ ํ™”๋ฉด

 

์Šค๋ ˆ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š”

Start, Sleep ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Abort, Join, Suspend, Resume์ด ์žˆ๋‹ค.

Join์€ ํ•ด๋‹น ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋  ๋–„๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ์ด๋ฉฐ,

Abort๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒ,

Suspend๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ,

Resume์€ ๋Œ€๊ธฐ ์ƒํƒœ ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.