본문 바로가기

전체 글66

[C#] 메모리 베리어 예제 class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Main(string[] args) { int count = 0; while(true) { count++; x = y = r1 = r2 = 0; Task t1 = new Task(Thread1); Task t2 = new Task(Thread2); t1.Start(); t2.Start(); Task.WaitAll(t1, t2); if (r1 == 0 && r2 == 0) break; } Console.WriteLine($"{count}번만에 루프 탈출"); } static void Thread1() { y = 1; Threa.. 2023. 3. 6.
[C#] 캐시 Special Locality 테스트 Temporal Locality 와 Spartial Locality Temporal Loaclity : 최근에 접근했던 주소값을 다시 접근하는 경향 - 한번 사용한 주소의 메모리 영역은 자주 접하게 된다. > 몇 초 뒤 해당 주소에 재접근할 것을 예상하여 캐싱 Spatial Locality : 최근 접근했던 주소값 근처의 주소들을 접근하는 경향. - 한번 사용했던 주소의 근처 영역은 접근이 이루어질 확률이 관계없는 곳보다 더 높다. > 다음 번에 해당 주소의 근처에 접근할 것을 예상하여 블록 단위 캐싱 2023. 3. 5.
[C#] 컴파일러 최적화로 인한 데드락 예제 class Program { private static bool isStop = false; static void Main(string[] args) { Task t = new Task(MainRun); t.Start(); Thread.Sleep(1000); isStop = true; Console.WriteLine("서브 스레드 Stop 호출"); t.Wait(); Console.WriteLine("메인 스레드 종료"); } static void MainRun() { Console.WriteLine("서브 스레드 시작"); while(isStop == false) { } Console.WriteLine("서브 스레드 종료"); } } 단순히 봤을 땐 문제 없으나, Release 모드로 디버그해보면, s.. 2023. 3. 3.
[C#] Thread Join 예제 2023. 2. 27.