SERVER/Multi-Thread2024. 3. 4. 21:47SRWLock전용 LockGuard 제작하기

lock_guard std::lock_guard - cppreference.com template class lock_guard; (since C++11) The class lock_guard is a mutex wrapper that provides a convenient RAII-style mechanism for owning a mutex for the duration of a scoped block. When a lock_guard object is created, it attempts to take en.cppreference.com lock_guard란 c++11 부터 제공되는 클래스이다. C++의 RAII(Resource Aquisition Is Initailiza..

SERVER/Multi-Thread2024. 2. 12. 16:41스레드의 생성과 종료(_beginthreadex, _endthreadex 소스코드 분석)

쓰레드 생성 CreateThread HANDLE CreateThread( [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] SIZE_T dwStackSize, [in] LPTHREAD_START_ROUTINE lpStartAddress, [in, optional] __drv_aliasesMem LPVOID lpParameter, [in] DWORD dwCreationFlags, [out, optional] LPDWORD lpThreadId ) dwStatckSize 스레드 스택의 크기 프로세스가 시작되면 내부적으로 CreateThread 함수를 호출하여 프로세스의 주 스레드를 초기화한다. 이때, CreateProcess는 실행 파일 내부에 저장..

[Thread] 스핀락(SpinLock)
SERVER/Multi-Thread2022. 9. 3. 17:53[Thread] 스핀락(SpinLock)

여러개의 스레드가 공유자원을 쓰고있을 때, 해당 공유자원이 있는 임계 영역(Critical Section)에 동시에 접근하게 되면, 공유 자원에 대한 접근이 어떤 순서로 이루어졌는지에 따라 실행 결과가 같지 않고 실행할때 마다 달라지는 경쟁 상태(Race Condition)이 발생하게 된다. 따라서 해당 문제를 해결하기 위해 한 스레드가 임계 영역에 접근하면 다른 스레드들은 이 스레드가 이용하는 동안 해당 임계영역에 접근 할 수 없도록, 즉 두 개 이상의 프로세스가 동시에 임계영역에 접근하는 것을 막하야하는데, 이를 상호 배제(Mutual Exclusion)라고 한다. 상호배제는 Lock을 통해 달성할 수 있는데, 이 글에서는 Lock을 구현하는 여러가지 방법중 스핀락(SpinLock)에 대해서 알아보고..

image