레이블이 시샵쓰레드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 시샵쓰레드인 게시물을 표시합니다. 모든 게시물 표시

2022년 2월 26일 토요일

(동영상)C# Thread 쓰레드 동기화 lock구문, Monitor, Mutex, C#교육, WPF교육, C#학원, WPF학원

 (동영상)C# Thread 쓰레드 동기화 lock구문, Monitor, Mutex, C#교육, WPF교육, C#학원, WPF학원


https://www.youtube.com/watch?v=-0lJyIjwl3s&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=27 

https://www.youtube.com/watch?v=q-3lL_FtOgQ&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=28 

https://www.youtube.com/watch?v=0W2_2lKib-I&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=29 


https://www.youtube.com/watch?v=D0siTPkCx3M&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=30 


https://www.youtube.com/watch?v=OYzr_vGPqZc&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=31 

http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=428 


(동영상)C# Thread 쓰레드 동기화 lock구문, Monitor, Mutex

(동영상)C# Thread 쓰레드 동기화 lock구문, Monitor, MutexC# Thread쓰레드 동기화lock구문, Monitor, MutexC# 멀티 쓰레드(동기화, lock)멀티쓰레드 환경인 경우 여러 곳에서 같은 객체의 메소드/코드블록을 호출

ojc.asia



C# Thread

쓰레드 동기화

lock구문, Monitor, Mutex







C# 멀티 쓰레드(동기화, lock)


멀티쓰레드 환경인 경우 여러 곳에서 같은 객체의 메소드/코드블록을 호출하는 경우에 예기치 않은 결과가 나타날 수 있다. 어떤 메소드/코드블록의 사용을 한 쓰레드가 끝난 후 다른 쓰레드가 접근하게 하려면 lock 문을 사용 한다. 


lock으로 싼 코드는 한번에 하나의 쓰레드만 접근가능한 임계영역(Critical Section)이 된다.


using System;

using System.Threading;


public class ThreadTest3

{ private object obj = new object();

public void Print(string s) 

{

//lock을 걸어준 구문은 처음 쓰레드가 끝날때 까지 다른 쓰레드가 접근 금지

lock (obj) 

{

for(int i=0; i < 5; i++) 

{

for(int j=0; j < 5; j++) 

{

Thread.Sleep(100);

Console.Write(",");

}


Console.WriteLine("{0} ", s);

}

}

}


public void FirstWork() { Print("F"); }

public void SecondWork() { Print("S"); }

}


class TestMain 

{

[MTAThread]

public static void Main() 

{

ThreadTest3 t = new ThreadTest3();

Thread first = new Thread(new ThreadStart(t.FirstWork));

Thread second = new Thread(new ThreadStart(t.SecondWork));


first.Start();

second.Start();

}

}




C# 멀티 쓰레드(동기화, Monitor)


lock 문 이외에 System.Monitor라는 클래스가 있는데 특정 코드블럭을 배차적으로 락을 걸수 있다. 이 Monitor 클래스에는 임계구간을 진입시 Enter, 나갈때 사용하는 Exit 메소드가 있다. Enter 메소드는 잠금 상황으로, Exit 메소드는 잠금을 해제하는 역할을 한다. 


Monitor 클래스는 Wait(), Pulse() 메소드도 있는데 Wait는 쓰레드를 잠시 대기상태로 만들고 Pulse는 다시 활성화 한다.


앞에서 작성한 예제를 System.Monitor를 이용하는 예문으로 바꿔 보자.


using System;

using System.Threading;


public class ThreadTest3

{

        private object obj = new object();

public void Print(string s) 

{

//Monitor.Enter 구문은 처음 쓰레드가 끝날때 까지 다른 쓰레드가 접근 금지

Monitor.Enter(obj);

for(int i=0; i < 5; i++) 

{

for(int j=0; j < 5; j++) 

{

Thread.Sleep(100);

                                         Console.Write(",");

}

Console.WriteLine("{0} ", s);

}

Monitor.Exit(obj);

}


public void FirstWork() { Print("F"); }

public void SecondWork() { Print("S"); }

}


class TestMain 

{

[MTAThread]

public static void Main() 

{

ThreadTest3 t = new ThreadTest3();

Thread first = new Thread(new ThreadStart(t.FirstWork));

Thread second = new Thread(new ThreadStart(t.SecondWork));


first.Start(); second.Start();

}

}



C# 멀티 쓰레드(동기화, Mutex)


뮤텍스(Mutex) 클래스는 공유 리소스에 대해 하나의 쓰레드만이 사용 가능하도록 지원하는데 작동방식이 Monitor 클래스와 유사하고 특정 코드 블럭, 임계구간(Critiacal Section)을 서로 다른 프로세스간 배타적으로 Locking하는 기능을 가지고 있다. 이와는 달리 모니터(Monitor) 클래스는 하나의 프로세스 안에서만 사용할 수 있다.


using System;

using System.Threading;


public class ThreadTest3

{

     private static Mutex mutex = new Mutex();


    public void Print(string s)

    {

        //WaitOne을 걸어준 구문은 처음 쓰레드가 끝날때 까지 다른 쓰레드가 접근 금지

        mutex.WaitOne();

        for (int i = 0; i < 5; i++)

        {

            for (int j = 0; j < 5; j++)

            {

                Thread.Sleep(100); 

                Console.Write(",");

            }

            Console.WriteLine("{0} ", s);

        }

        mutex.ReleaseMutex();

    }


    public void FirstWork() { Print("F"); }

    public void SecondWork() { Print("S"); }

}


class TestMain

{

    [MTAThread]

    public static void Main()

    {

        ThreadTest3 t = new ThreadTest3();

        Thread first = new Thread(new ThreadStart(t.FirstWork));

        Thread second = new Thread(new ThreadStart(t.SecondWork));


        first.Start();   second.Start();

    }

}


#Thread, #시샵쓰레드, #시샵동영상, #쓰레드동기화, #lock, #Monitor, #Mutex, #시샵교육, #닷넷교육, #닷넷학원, #시샵학원, #시샵Thread, Thread, 시샵쓰레드, 시샵동영상, 쓰레드동기화, lock, Monitor, Mutex, 시샵교육, 닷넷교육, 닷넷학원, 시샵학원, 시샵Thread,  

2022년 2월 24일 목요일

C# 스레드(Thread), HelloWorld, ThreadStart, ParameterizedThreadStart 동영상

 

C# 쓰레드 중단 / 재시작 (Suspend, Resume)


http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=425 


[동영상]C# 쓰레드(Thread) 중단 / 재시작 Suspend, Resume

[동영상]C# 쓰레드(Thread) 중단 / 재시작 Suspend, ResumeC# Thread중단 / 재시작Suspend, Resume쓰레드 중단 / 재시작 (Suspend, Resume)쓰레드를 쉬게 하는 방법은 Thread.Suspend를 이용할 수도 있다. Sleep과의 차이는

ojc.asia


https://www.youtube.com/watch?v=-0lJyIjwl3s&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=28 

쓰레드를 쉬게 하는 방법은 Thread.Suspend를 이용할 수도 있다. Sleep과의 차이는 Sleep인 경우에는 지정한 시간 만큼 쉰다는 의미지만 Suspend인 경우에는 Resume 메소드를 호출할 때까지 쉬게 된다는 것이다. 또 다른 차이점은 Sleep 메소드는 현재 쓰레드를 일시중지하게 하는 정적 메소드로 자기 자신의 쓰레드만 쉬게 할 수 있다. 반면에 Suspend 는 자기 뿐 아니라 다른 쓰레드도 쉬게 할 수 있다. Suspend로 잠을 자고 있는 Thread가 스스로 깰 수는 없다. 그래서 Suspend로 쉬고 있는  쓰레드는 다른  쓰레드가 Resume을 이용하여 깨울 때 까지 쉬고 있는 것이다. 주의할 점은 Sleep인 경우는 쓰레드가 즉시 중단 되지만 Suspend로 쉬게하면 중단해도 되는 안전한 상황까지 즉시 중단 되지 않을 수도 있다.


Suspend 메소드로 쓰레드를 잠시 중지하면 Resume 메소드로 다시 동작하게 할 수 있지만 Thread.Abort로 일단 쓰레드를 종료시키면 다시 되살릴 수 없다.


using System;

using System.Threading;

public class Test

{

    public bool sleep = false;


    public void First()

    {

        for (int i = 0; i < 10; i++)

        {

            //1.5초 동안 쉬면서 F0, F1, ..., F5까지 출력하고 쉼

            Thread.Sleep(1500);

            Console.WriteLine("F{0}", i);


            if (i == 5)

            {

                sleep = true;

                Console.WriteLine("");

                Console.WriteLine("first 쉼...");

                Thread.CurrentThread.Suspend();

            }

        }

    }


    public static void Main()

    {

        Test t = new Test();


        Thread first = new Thread(new ThreadStart(t.First));

        first.Start();



        //메인이 아래에서 대기 합니다.

        //쓰레드가 실행하는 First 메서드에서 i가 5가 되면 쉬면서 sleep을 true로 만드는데, 그때까지 쉼, 6초 동안 쉼

        while (t.sleep == false) { }


        Console.WriteLine("first를 깨웁니다...2초후 깨어 납니다.");


        //2초동안 메인이 대기

        Thread.Sleep(2000);


        //쓰레드를 깨움, i가 5가되고 2초 후 쓰레드 재시작

        first.Resume();

    }

}





#시샵동영상, #닷넷쓰레드, #hread, #Suspend, #Resume, #시샵교육, #닷넷교육, #닷넷동영상, #시샵쓰레드, #스레드,시샵동영상, 닷넷쓰레드, hread, Suspend, Resume, 시샵교육, 닷넷교육, 닷넷동영상, 시샵쓰레드, 스레드,  

 #시샵동영상#닷넷쓰레드#hread#Suspend#Resume#시샵교육#닷넷교육#닷넷동영상#시샵쓰레드#스레드시샵동영상닷넷쓰레드hreadSuspendResume시샵교육닷넷교육닷넷동영상시샵쓰레드스레드,

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...