You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
96 lines
1.7 KiB
96 lines
1.7 KiB
#ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED |
|
#define BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED |
|
|
|
// |
|
// boost/detail/atomic_count_pthreads.hpp |
|
// |
|
// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. |
|
// |
|
// Distributed under the Boost Software License, Version 1.0. (See |
|
// accompanying file LICENSE_1_0.txt or copy at |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
// |
|
|
|
#include <pthread.h> |
|
|
|
// |
|
// The generic pthread_mutex-based implementation sometimes leads to |
|
// inefficiencies. Example: a class with two atomic_count members |
|
// can get away with a single mutex. |
|
// |
|
// Users can detect this situation by checking BOOST_AC_USE_PTHREADS. |
|
// |
|
|
|
namespace boost |
|
{ |
|
|
|
namespace detail |
|
{ |
|
|
|
class atomic_count |
|
{ |
|
private: |
|
|
|
class scoped_lock |
|
{ |
|
public: |
|
|
|
scoped_lock(pthread_mutex_t & m): m_(m) |
|
{ |
|
pthread_mutex_lock(&m_); |
|
} |
|
|
|
~scoped_lock() |
|
{ |
|
pthread_mutex_unlock(&m_); |
|
} |
|
|
|
private: |
|
|
|
pthread_mutex_t & m_; |
|
}; |
|
|
|
public: |
|
|
|
explicit atomic_count(long v): value_(v) |
|
{ |
|
pthread_mutex_init(&mutex_, 0); |
|
} |
|
|
|
~atomic_count() |
|
{ |
|
pthread_mutex_destroy(&mutex_); |
|
} |
|
|
|
long operator++() |
|
{ |
|
scoped_lock lock(mutex_); |
|
return ++value_; |
|
} |
|
|
|
long operator--() |
|
{ |
|
scoped_lock lock(mutex_); |
|
return --value_; |
|
} |
|
|
|
operator long() const |
|
{ |
|
scoped_lock lock(mutex_); |
|
return value_; |
|
} |
|
|
|
private: |
|
|
|
atomic_count(atomic_count const &); |
|
atomic_count & operator=(atomic_count const &); |
|
|
|
mutable pthread_mutex_t mutex_; |
|
long value_; |
|
}; |
|
|
|
} // namespace detail |
|
|
|
} // namespace boost |
|
|
|
#endif // #ifndef BOOST_SMART_PTR_DETAIL_ATOMIC_COUNT_PTHREADS_HPP_INCLUDED
|
|
|