블로그는 나의 힘!

// Visual Studio 2012 : 
_Mutex_base(int _Flags = 0) {
     _Mtx_initX(&_Mtx, _Flags | _Mtx_try);
}

// Visual Studio 2015 : 
_Mutex_base(int _Flags = 0) noexcept {
     _Mtx_init_in_situ(_Mymtx(), _Flags | _Mtx_try);
}



std::mutex가 SRW Lock을 사용해서 구현했음.
위치 : (Visual Studio 설치 경로)/VC/Tools/MSVC/(버전)/crt/src/stl/mutex.cpp
        class _Mutex_base -> /stl/inc/mutex
        _Mtx_init_in_situ -> /stl/src/mutex.cpp
        create_stl_critical_section -> /stl/src/primitives.hpp
        __crtIitializeSRWLock -> /stl/src/winapisupp.cpp


Window 경우 stl_critical_section_win7이라는 클래스의 생성자를 호출하도록 구현되어 있음.
Windows Vista와 그 이전 버전에서는 크리티컬 섹션을 사용해서 구현. 
SRW Lock 자체는 Vista 때 추가 했는데, try_lock에 대응되는 기능이 Windows 7에 추가됐기 때문.

VS2013까지는 std::mutex가 크리티컬 섹션보다 느리다가,  
VS2015부터는 더 빨라진 것을 보면 VS2013까지는 다른 구현 방식
(크리티컬 섹션일 수도 있고.. 아니면 다른 방법)을 사용하다가 
VS2015부터 SRW Lock을 사용하기 시작한 듯.




# SRW(Slim Reader/Writer) LOCK


SRW(Slim Reader/Writer) Lock을 
사용하면 단일 프로세스의 스레드가 공유 리소스에 액세스할 수 있다. 
속도에 최적화되어 있으며 메모리를 거의 차지하지 않는다. 
Slim reader-writer Lock은 프로세스 간에 공유할 수 없다.

Reader 스레드는 공유 리소스에서 데이터를 읽는 반면 Writer 스레드는 공유 리소스에 데이터를 쓴다.

여러 스레드가 공유 리소스를 사용하여 읽고 쓸 때 Reader 스레드가 계속 실행되지만, 
쓰기 작업이 드물면 Critical Section 또는 Mutex와 같은 배타적 잠금이 병목 현상이 될 수 있다.





참조 : 
Microsoft STL의 std::mutex.. : 네이버블로그 (naver.com) 

 

Microsoft STL의 std::mutex 구현

많은 분들이 Microsoft STL(Visual Studio를 설치하면 같이 딸려오는 C++ 표준 라이브러리 구현체)...

blog.naver.com

Slim Reader/Writer (SRW) Locks - Win32 apps | Microsoft Docs

 

Slim Reader/Writer (SRW) Locks - Win32 apps

Slim reader/writer (SRW) locks enable the threads of a single process to access shared resources; they are optimized for speed and occupy very little memory.

docs.microsoft.com



 

'[ Programing ] > STL & Booster' 카테고리의 다른 글

boost::thread_group  (0) 2023.06.26
C++ STL fill_n / fill  (0) 2021.01.22
C++ STL Function  (0) 2020.09.14
C++ stl numeric_limits  (0) 2020.06.10
C++17. STL variant  (0) 2020.06.08
Posted by Mister_Q