1 // Copyright (C) 2016-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 2 // This Source Code Form is subject to the terms of the Mozilla Public 3 // License, v. 2.0. If a copy of the MPL was not distributed with this 4 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 #include "../include/criticalsection.hpp" 6 7 #ifdef _WIN32 8 9 #include <Windows.h> 10 11 namespace vsomeip_v3 { 12 13 struct CriticalSection::Impl final { 14 CRITICAL_SECTION m_criticalSection; 15 }; 16 17 CriticalSection()18 CriticalSection::CriticalSection() 19 : m_impl(new CriticalSection::Impl()) { 20 InitializeCriticalSection(&m_impl->m_criticalSection); 21 } 22 ~CriticalSection()23 CriticalSection::~CriticalSection() { 24 DeleteCriticalSection(&m_impl->m_criticalSection); 25 } 26 lock()27 void CriticalSection::lock() { 28 EnterCriticalSection(&m_impl->m_criticalSection); 29 } 30 try_lock()31 bool CriticalSection::try_lock() { 32 return (TryEnterCriticalSection(&m_impl->m_criticalSection) != 0); 33 } 34 unlock()35 void CriticalSection::unlock(){ 36 LeaveCriticalSection(&m_impl->m_criticalSection); 37 } 38 39 } // namespace vsomeip_v3 40 41 #endif 42