첫번째 복습2 멀티스레드 InterLocked namespace ServerCore { class Program { static int number = 0; static void Thread_1() { for (int i = 0; i < 100000; i++) { number++; } } static void Thread_2() { for (int i = 0; i < 100000; i++) { number--; } } static void Main(string[] args) { Task t1 = new Task(Thread_1); Task t2 = new Task(Thread_2); t1.Start(); t2.Start(); Task.WaitAll(t1, t2); Console.WriteLine(number); } } } 1씩 100,000 번을 더.. 2024. 4. 18. 메모리 배리어 1. 메모리 배리어 정의 중앙처리장치(CPU)나 컴파일러에게 특정 연산의 순서를 강제하는 기능 2. 메모리 배리어가 없을시의 문제점 중앙처리장치와 컴파일러는 멀티스레드 환경에서 개발자가 의도한 로직 순서를 뒤바꿀 수도 있는데 로직 실행 순서가 바뀌어 실행된다면 잘못된 결과가 발생할 수 있다. 3. 메모리 배리어의 용도 - 코드 재배치 억제 int a = 0; void Thread_A() { a = 10; console.writeLine(a); } void Thread_A() { a = 10; Thread.MemoryBarrier(); console.writeLine(a); } 멀티 스레드 환경에서 메모리 배리어가 없으면 무조건 "a=10" 라는 연산이 처음부터 실행되는 게 아니라 "console.writ.. 2024. 4. 18. 이전 1 다음