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