Added new header to Loki.
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@1045 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
c74e851a38
commit
c447453a8b
1 changed files with 69 additions and 0 deletions
69
include/loki/ThreadLocal.h
Normal file
69
include/loki/ThreadLocal.h
Normal file
|
@ -0,0 +1,69 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// The Loki Library
|
||||
// Copyright (c) 2009 by Rich Sposato
|
||||
// Permission to use, copy, modify, distribute and sell this software for any
|
||||
// purpose is hereby granted without fee, provided that the above copyright
|
||||
// notice appear in all copies and that both that copyright notice and this
|
||||
// permission notice appear in supporting documentation.
|
||||
// The author makes no representations about the
|
||||
// suitability of this software for any purpose. It is provided "as is"
|
||||
// without express or implied warranty.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef LOKI_THREAD_LOCAL_H_INCLUDED
|
||||
#define LOKI_THREAD_LOCAL_H_INCLUDED
|
||||
|
||||
// $Id$
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// First assume the compiler does allow thread-local storage by #defining the
|
||||
// macro which allows compiler to see the code inside this file.
|
||||
// Then #undefine the macro for compilers which are known for not supporting
|
||||
// thread-local storage.
|
||||
#define LOKI_THINKS_COMPILER_ALLOWS_THREAD_LOCAL_STORAGE 1
|
||||
|
||||
// The __APPLE__ macro does not refer to a compiler, but to the Apple OSX operating system.
|
||||
#if defined( __APPLE__ )
|
||||
#warning "GCC for Apple does not allow thread_local storage, so you can not use some parts of Loki."
|
||||
#undef COMPILER_ALLOWS_THREAD_LOCAL_STORAGE
|
||||
#endif
|
||||
|
||||
#if ( defined( __CYGWIN__ ) && ( __GNUC__ <= 3 ) )
|
||||
#warning "Older versions of GCC for Cygwin do not allow thread_local storage, so you can not use some parts of Loki."
|
||||
#undef COMPILER_ALLOWS_THREAD_LOCAL_STORAGE
|
||||
#endif
|
||||
|
||||
#if defined( LOKI_THINKS_COMPILER_ALLOWS_THREAD_LOCAL_STORAGE ) && !defined( LOKI_THREAD_LOCAL )
|
||||
|
||||
/** @par thread_local Keyword
|
||||
Some parts of Loki require compilers to provide thread local storage - meaning
|
||||
each thread gets its own copy of the data. The next version of C++ will have
|
||||
a new keyword, thread_local for that purpose. Some existing compilers already
|
||||
provide thread local storage using different syntax, so these lines use
|
||||
thread_local to mimic that syntax. If your compiler provides thread local
|
||||
storage but using different syntax besides "thread_local", you may want to
|
||||
modify these lines. If your compiler does not support thread local storage,
|
||||
you can't use some parts of Loki.
|
||||
*/
|
||||
#if defined( _MSC_VER )
|
||||
#if ( _MSC_VER >= 1300 )
|
||||
#define LOKI_THREAD_LOCAL __declspec( thread )
|
||||
#else
|
||||
#error "Only Visual Studio versions 7.0 and after supported."
|
||||
#endif
|
||||
|
||||
#elif ( __GNUC__ )
|
||||
#define LOKI_THREAD_LOCAL __thread
|
||||
|
||||
#else
|
||||
#warning "Check if your compiler provides thread local storage."
|
||||
#define LOKI_THREAD_LOCAL thread_local
|
||||
#endif
|
||||
|
||||
#endif // if compiler allows thread_local storage and LOKI_THREAD_LOCAL macro not defined yet
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#endif // end file guardian
|
Loading…
Add table
Reference in a new issue