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.
88 lines
3.0 KiB
C++
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_
|
|
|
|
|