본문 바로가기

MultiThread6

CAS(Compare and Swap)와 SpinLock 구현 Compare And Swap(CAS) 멀티 스레딩에서 동기화를 수행하는 데 사용되는 원자적 명령. 메모리 위치의 내용을 주어진 값과 비교하고, 동일한 경우에만 해당 메모리 위치의 내용을 새로운 주어진 값으로 수정 SpinLock 멀티스레드 환경에서 임계 구역에 접근할 때 진입이 가능할때까지 루프를 돌면서 재시도하는 방식으로 구현된 락 SpinLock의 구현은 아래와 같다. // GameServer.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #include #include #include #include class SpinLock { public: void .. 2021. 11. 2.
RAII 패턴과 LockGuard 방식의 스레드 제어 RAII (Resoruce Acquisition is Initialization) 패턴은 자원의 할당과 해제를 자동화해주는 패턴입니다. DB인증, 공유자원 등 여러 방면에서 활용될 수 있으며 코드의 안전성을 보장해줍니다. 스택에 할당된 메모리가 자동으로 해제되며 소멸자가 호출된다는 점을 이용한 패턴이며, 저는 최근 C++의 멀티스레드 프로그래밍을 공부하며 접하게 되었습니다. Thread의 동기화를 제어하는 방식은 Atomic과 Lock등 여러 방법이 있습니다. 다만 Lock의 경우 lock, unlock이 set를 이루어 작동되어야합니다. lock 이후 unlock이 이루어지지 않는 경우 무한한 대기상태에 빠지게 됩니다. 멀티스레드 환경에서는 이러한 문제를 LockGuard를 이용해 unlock을 보장합.. 2021. 10. 27.