$extrastylesheet
threads.C
Go to the documentation of this file.
00001 // The libMesh Finite Element Library.
00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
00003 
00004 // This library is free software; you can redistribute it and/or
00005 // modify it under the terms of the GNU Lesser General Public
00006 // License as published by the Free Software Foundation; either
00007 // version 2.1 of the License, or (at your option) any later version.
00008 
00009 // This library is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // Lesser General Public License for more details.
00013 
00014 // You should have received a copy of the GNU Lesser General Public
00015 // License along with this library; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018 
00019 // System Includes
00020 
00021 // Local Includes
00022 #include "libmesh/threads.h"
00023 
00024 #if LIBMESH_HAVE_OPENMP
00025 #include <omp.h>
00026 #endif
00027 
00028 namespace libMesh
00029 {
00030 
00031 #if !defined(LIBMESH_HAVE_TBB_API) && defined(LIBMESH_HAVE_PTHREAD)
00032 std::map<pthread_t, unsigned int> Threads::_pthread_unique_ids;
00033 Threads::spin_mutex Threads::_pthread_unique_id_mutex;
00034 
00035 unsigned int Threads::pthread_unique_id()
00036 {
00037 #if LIBMESH_HAVE_OPENMP
00038   return omp_get_thread_num();
00039 #else
00040   spin_mutex::scoped_lock lock(_pthread_unique_id_mutex);
00041   return _pthread_unique_ids[pthread_self()];
00042 #endif
00043 }
00044 #endif
00045 
00046 //-------------------------------------------------------------------------
00047 // Threads:: object instantiation
00048 Threads::spin_mutex Threads::spin_mtx;
00049 Threads::recursive_mutex Threads::recursive_mtx;
00050 bool Threads::in_threads = false;
00051 
00052 
00053 } // namespace libMesh