
스핀락(SpinLock) 구현하기 1/2
지난 글에서 락Lock과 데드락DeadLock**을 이해하기 위해 화장실 앞에서 기다리는 사람들의 비유를 들었었습니다. 문 앞에서 계속 기다린다. 별로 안 급하니까 5분 뒤에 다시 오기로 하고 자리로 돌아간다. 화장실 옆에 있는 카운터 직원한테 화장실이 비면 내 테이블로 알려달라고 부탁한다. using System; using S...

지난 글에서 락Lock과 데드락DeadLock**을 이해하기 위해 화장실 앞에서 기다리는 사람들의 비유를 들었었습니다. 문 앞에서 계속 기다린다. 별로 안 급하니까 5분 뒤에 다시 오기로 하고 자리로 돌아간다. 화장실 옆에 있는 카운터 직원한테 화장실이 비면 내 테이블로 알려달라고 부탁한다. using System; using S...

지난 포스팅에서는 SpinLock에 관하여 구현해보았습니다. 바로 Interlocked.CompareExchange() 메소드를 사용했었죠. 이번 포스팅에서는 컨텍스트 스위칭Context Switching에 관하여 알아보고 구현해보겠습니다. 컨텍스트 스위칭은 앞서 멀티쓰레드 프로그래밍을 소개하는 첫 번째 글에서 잠깐 언급이 되었었는데요, 이번에 좀 더...

이번 포스팅은 메모리베리어에 관하여 다루어보겠습니다. 메모리베리어는 지난번에 확인했었던 릴리즈모드에서의 어셈블리어화 최적화를 할 때 코드의 순서가 뒤바뀌는 것과 같은 상황이 릴리즈모드가 아닌데도 하드웨어적으로 일어날 때 사용할 수 있는 방법입니다. 문제가 일어나는 예시 코드를 살펴보겠습니다. using System; using System.Data...

이번 포스팅은 락Lock과 데드락DeadLock에 관하여 알아보겠습니다. 먼저 간단히 비유를 통해 이해해보겠습니다. Lock 들어와서 문을 잠가주고 나갈때 다시 열어놓는 행위. DeadLock 나갈때 문을 안열어놓고 가서 다음 들어올 사람이 못들어오는 현상.(창문...

이번 글은 멀티쓰레드 프로그래밍에서 일어나는 경합조건Race Condition에 관하여 알아보고, 이를 해결하기 위해 원자atomic 단위의 코딩이 필요하다는 것을 알아보겠습니다. 경합 조건이란, 서로 경쟁하는 조건이라고 보시면 될 것 같습니다. 그리고 이 조건에서 일어날 것으로 예상할 수 있는 문제는 예를 들어 카페에서, 한 테이블에서 콜라를 ...

이번에는 캐시에 대해서 간단히 실습해보겠습니다. 물론 캐시에 대해 아는 것도 멀티쓰레드 프로그래밍과 관련이 있습니다. 멀티쓰레드 프로그래밍에서는 코드가 캐시를 얼마나 효율적으로 잘 사용하는지 여부에 따라서 그 성능의 차이가 싱글쓰레드 프로그래밍보다 커진다고 합니다. 그렇다면 캐시란 무엇일까요? 지난 포스팅에서 소개했던 AMD사의 CPU를 다시 보겠습니...

싱글쓰레드 프로그래밍과는 다르게, 멀티쓰레드 프로그래밍은 분명히 디버그 모드일때는 잘 동작하던 코드가 릴리즈 모드일때는 여러 에러를 만들어내는 경우가 많다고 합니다. 그리고 그 원인은 바로 Release를 위해 컴퓨터가 assembly 언어로 변환할 때 자체적으로 하는 코드 최적화 때문일 수 있습니다. 릴리즈를 해본 경험이 풍부하지 않다면 미리 많은 ...

서버를 만들기 위해서는 멀티쓰레드의 개념을 알아야 합니다! 먼저, 다들 컴퓨터에는 CPU가 있다는 것 알고 계실텐데요, CPU는 몇 개의 코어 프로세서로 이루어져 있습니다. 요새 가장 최신의 하이엔드 일반소비자용 AMD CPU는 7900x인데요, 12개의 코어로 이루어져 있습니다. 쓰레드는 여기 있는 코어가 빠르게 움직여서 마치 여러개 있는 것...
축소하는 캐릭터의 크기에 맞추어 카메라와 캐릭터 간의 간격을 조정하기 위한 기능 추가. //C#코드, 유니티 using System.Collections; using System.Collections.Generic; using UnityEngine; public class CameraController : MonoBehaviour { ...
