New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
lwm_pthreads.hpp in vendors/XIOS/current/extern/boost/include/boost/smart_ptr/detail – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/smart_ptr/detail/lwm_pthreads.hpp @ 3408

Last change on this file since 3408 was 3408, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

  • Property svn:keywords set to Id
File size: 1.7 KB
RevLine 
[3408]1#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
2#define BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
3
4// MS compatible compilers support #pragma once
5
6#if defined(_MSC_VER) && (_MSC_VER >= 1020)
7# pragma once
8#endif
9
10//
11//  boost/detail/lwm_pthreads.hpp
12//
13//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
14//
15// Distributed under the Boost Software License, Version 1.0. (See
16// accompanying file LICENSE_1_0.txt or copy at
17// http://www.boost.org/LICENSE_1_0.txt)
18//
19
20#include <boost/assert.hpp>
21#include <pthread.h>
22
23namespace boost
24{
25
26namespace detail
27{
28
29class lightweight_mutex
30{
31private:
32
33    pthread_mutex_t m_;
34
35    lightweight_mutex(lightweight_mutex const &);
36    lightweight_mutex & operator=(lightweight_mutex const &);
37
38public:
39
40    lightweight_mutex()
41    {
42
43// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
44
45#if defined(__hpux) && defined(_DECTHREADS_)
46        BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );
47#else
48        BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );
49#endif
50    }
51
52    ~lightweight_mutex()
53    {
54        BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );
55    }
56
57    class scoped_lock;
58    friend class scoped_lock;
59
60    class scoped_lock
61    {
62    private:
63
64        pthread_mutex_t & m_;
65
66        scoped_lock(scoped_lock const &);
67        scoped_lock & operator=(scoped_lock const &);
68
69    public:
70
71        scoped_lock(lightweight_mutex & m): m_(m.m_)
72        {
73            BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
74        }
75
76        ~scoped_lock()
77        {
78            BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
79        }
80    };
81};
82
83} // namespace detail
84
85} // namespace boost
86
87#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.