PageRenderTime 9ms CodeModel.GetById 4ms app.highlight 2ms RepoModel.GetById 1ms app.codeStats 1ms

/Src/Dependencies/Boost/boost/asio/detail/posix_tss_ptr.hpp

http://hadesmem.googlecode.com/
C++ Header | 82 lines | 47 code | 19 blank | 16 comment | 2 complexity | a40459d8fabb15c83c904917dac9994a MD5 | raw file
 1//
 2// detail/posix_tss_ptr.hpp
 3// ~~~~~~~~~~~~~~~~~~~~~~~~
 4//
 5// Copyright (c) 2003-2011 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_TSS_PTR_HPP
12#define BOOST_ASIO_DETAIL_POSIX_TSS_PTR_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_HAS_PTHREADS) && !defined(BOOST_ASIO_DISABLE_THREADS)
21
22#include <pthread.h>
23#include <boost/asio/detail/noncopyable.hpp>
24
25#include <boost/asio/detail/push_options.hpp>
26
27namespace boost {
28namespace asio {
29namespace detail {
30
31// Helper function to create thread-specific storage.
32BOOST_ASIO_DECL void posix_tss_ptr_create(pthread_key_t& key);
33
34template <typename T>
35class posix_tss_ptr
36  : private noncopyable
37{
38public:
39  // Constructor.
40  posix_tss_ptr()
41  {
42    posix_tss_ptr_create(tss_key_);
43  }
44
45  // Destructor.
46  ~posix_tss_ptr()
47  {
48    ::pthread_key_delete(tss_key_);
49  }
50
51  // Get the value.
52  operator T*() const
53  {
54    return static_cast<T*>(::pthread_getspecific(tss_key_));
55  }
56
57  // Set the value.
58  void operator=(T* value)
59  {
60    ::pthread_setspecific(tss_key_, value);
61  }
62
63private:
64  // Thread-specific storage to allow unlocked access to determine whether a
65  // thread is a member of the pool.
66  pthread_key_t tss_key_;
67
68};
69
70} // namespace detail
71} // namespace asio
72} // namespace boost
73
74#include <boost/asio/detail/pop_options.hpp>
75
76#if defined(BOOST_ASIO_HEADER_ONLY)
77# include <boost/asio/detail/impl/posix_tss_ptr.ipp>
78#endif // defined(BOOST_ASIO_HEADER_ONLY)
79
80#endif // defined(BOOST_HAS_PTHREADS) && !defined(BOOST_ASIO_DISABLE_THREADS)
81
82#endif // BOOST_ASIO_DETAIL_POSIX_TSS_PTR_HPP