using System;
using System.Threading;
using System.Threading.Tasks;
namespace ServerCore
{
/// 컴파일러 최적화
/// 1.스레드는 각자 할당된 스택메모리는 각자 할당받은 스택메모리를 사용한다.
/// 2.전역으로 선언된 변수는 모든 스레드가 공통으로 사용한다. ex) _stop변수
///결론
///Release모드에서는 코드 최적화가 일어나서 Debug모드와 다르게 실행이 안될수도있다!
class Program
{
///static bool _stop = false;/// Release모드하면 최적화의 희생양이됨
volatile static bool _stop = false; /// 최적화에 포함시키지 않기 위해서는 volatile이라고 선언해주어야한다.
///하지만 volatile 은 그냥 사용하지 않는게 좋고 lock이나 다른거를 사용해야한다~~
static void ThreadMain()
{
Console.WriteLine("쓰레드 시작!");
///이코드는 Release에서 에러남
///Realese에서의 작동방식
///무한 뺑뺑이가 되는 구조가 되어버렷다
/*if (_stop == false)
{
while (true)
{
}
}*/
///Realese에서의 작동방식
while (_stop == false)
{
///누군가가 stop 신호를 해주기를 기다린다.
}
///컴퓨터의 생각방식
Console.WriteLine("쓰레드 종료!");
}
static void Main(string[] args)
{
Task t = new Task(ThreadMain);
t.Start();
Thread.Sleep(1000);///1초 대기 ///1초뒤에 스레드 종료되게 만들기위해!
_stop = true;
Console.WriteLine("Stop 호출");
Console.WriteLine("종료 대기중");
t.Wait();
Console.WriteLine("종료 성공");
}
}
}
댓글 없음:
댓글 쓰기