1//
2// detail/posix_static_mutex.hpp
3// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4//
5// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6//
7// Distributed under the Boost Software License, Version 1.0. (See accompanying
8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9//
10
11#ifndef BOOST_ASIO_DETAIL_POSIX_STATIC_MUTEX_HPP
12#define BOOST_ASIO_DETAIL_POSIX_STATIC_MUTEX_HPP
13
14#if defined(_MSC_VER) && (_MSC_VER >= 1200)
15# pragma once
16#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
18#include <boost/asio/detail/config.hpp>
19
20#if defined(BOOST_ASIO_HAS_PTHREADS)
21
22#include <pthread.h>
23#include <boost/asio/detail/scoped_lock.hpp>
24
25#include <boost/asio/detail/push_options.hpp>
26
27namespace boost {
28namespace asio {
29namespace detail {
30
31struct posix_static_mutex
32{
33 typedef boost::asio::detail::scoped_lock<posix_static_mutex> scoped_lock;
34
35 // Initialise the mutex.
36 void init()
37 {
38 // Nothing to do.
39 }
40
41 // Lock the mutex.
42 void lock()
43 {
44 (void)::pthread_mutex_lock(mutex: &mutex_); // Ignore EINVAL.
45 }
46
47 // Unlock the mutex.
48 void unlock()
49 {
50 (void)::pthread_mutex_unlock(mutex: &mutex_); // Ignore EINVAL.
51 }
52
53 ::pthread_mutex_t mutex_;
54};
55
56#define BOOST_ASIO_POSIX_STATIC_MUTEX_INIT { PTHREAD_MUTEX_INITIALIZER }
57
58} // namespace detail
59} // namespace asio
60} // namespace boost
61
62#include <boost/asio/detail/pop_options.hpp>
63
64#endif // defined(BOOST_ASIO_HAS_PTHREADS)
65
66#endif // BOOST_ASIO_DETAIL_POSIX_STATIC_MUTEX_HPP
67

source code of boost/boost/asio/detail/posix_static_mutex.hpp