You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
concurrentqueue/benchmarks/dlib/threads/thread_specific_data_extens...

88 lines
3.0 KiB
C++

// Copyright (C) 2006 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#undef DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_ABSTRACT_
#ifdef DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_ABSTRACT_
#include "threads_kernel_abstract.h"
namespace dlib
{
// ----------------------------------------------------------------------------------------
template <
typename T
>
class thread_specific_data
{
/*!
WHAT THIS OBJECT REPRESENTS
This object represents a container of thread specific data. When
a thread calls the data() member function it gets a reference to a T object
that is specific to its own thread. Each subsequent call to data() from that
thread returns the same instance. Also note that when a thread ends
the instance of its data() object gets destroyed and freed (if the thread
was created by the dlib library). So any pointers or references to the object
will be invalid after the thread has ended.
!*/
public:
thread_specific_data (
);
/*!
ensures
- #*this is properly initialized
!*/
~thread_specific_data (
);
/*!
ensures
- all resources allocated by *this have been freed. This includes
all the thread specific data returned by the data() functions.
!*/
T& data (
);
/*!
ensures
- if (the calling thread has NOT called this->data() before) then
- constructs an instance of T that is specific to the calling
thread.
- returns a reference to the T instance that was constructed for
the calling thread.
throws
- std::bad_alloc or any exception thrown by T's constructor
If an exception is thrown then the call to data() will have
no effect on *this.
!*/
const T& data (
) const;
/*!
ensures
- if (the calling thread has NOT called this->data() before) then
- constructs an instance of T that is specific to the calling
thread.
- returns a const reference to the T instance that was constructed for
the calling thread.
throws
- std::bad_alloc or any exception thrown by T's constructor
If an exception is thrown then the call to data() will have
no effect on *this.
!*/
private:
// restricted functions
thread_specific_data(thread_specific_data&); // copy constructor
thread_specific_data& operator=(thread_specific_data&); // assignment operator
};
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_THREAD_SPECIFIC_DATA_EXTENSIOn_ABSTRACT_