Mutex.h
Go to the documentation of this file.
00001 /****************************************************************
00002  *
00003  * Copyright (c) 2010
00004  *
00005  * Fraunhofer Institute for Manufacturing Engineering   
00006  * and Automation (IPA)
00007  *
00008  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00009  *
00010  * Project name: care-o-bot
00011  * ROS stack name: cob_driver
00012  * ROS package name: cob_relayboard
00013  * Description: custom Mutex implementation
00014  *                                                              
00015  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00016  *                      
00017  * Author: Christian Connette, email:christian.connette@ipa.fhg.de
00018  * Supervised by: Christian Connette, email:christian.connette@ipa.fhg.de
00019  *
00020  * Date of creation: Feb 2009
00021  * ToDo: - Remove this class
00022  *
00023  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00024  *
00025  * Redistribution and use in source and binary forms, with or without
00026  * modification, are permitted provided that the following conditions are met:
00027  *
00028  *     * Redistributions of source code must retain the above copyright
00029  *       notice, this list of conditions and the following disclaimer.
00030  *     * Redistributions in binary form must reproduce the above copyright
00031  *       notice, this list of conditions and the following disclaimer in the
00032  *       documentation and/or other materials provided with the distribution.
00033  *     * Neither the name of the Fraunhofer Institute for Manufacturing 
00034  *       Engineering and Automation (IPA) nor the names of its
00035  *       contributors may be used to endorse or promote products derived from
00036  *       this software without specific prior written permission.
00037  *
00038  * This program is free software: you can redistribute it and/or modify
00039  * it under the terms of the GNU Lesser General Public License LGPL as 
00040  * published by the Free Software Foundation, either version 3 of the 
00041  * License, or (at your option) any later version.
00042  * 
00043  * This program is distributed in the hope that it will be useful,
00044  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00045  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00046  * GNU Lesser General Public License LGPL for more details.
00047  * 
00048  * You should have received a copy of the GNU Lesser General Public 
00049  * License LGPL along with this program. 
00050  * If not, see <http://www.gnu.org/licenses/>.
00051  *
00052  ****************************************************************/
00053 
00054 #ifndef MUTEX_INCLUDEDEF_H
00055 #define MUTEX_INCLUDEDEF_H
00056 //-----------------------------------------------
00057 #include <pthread.h>
00058 
00059 const unsigned int INFINITE = 0;
00060 
00061 
00062 class Mutex
00063 {
00064 private:
00065         pthread_mutex_t m_hMutex;
00066 
00067 public:
00068         Mutex()
00069         {
00070                 pthread_mutex_init(&m_hMutex, 0);
00071         }
00072 
00073         Mutex( std::string sName)
00074         {
00075 // no named Mutexes for POSIX
00076                 pthread_mutex_init(&m_hMutex, 0);
00077         }
00078 
00079         ~Mutex()
00080         {
00081                 pthread_mutex_destroy(&m_hMutex);
00082         }
00083 
00086         bool lock( unsigned int uiTimeOut = INFINITE )
00087         {
00088                 int ret;
00089 
00090                 if (uiTimeOut == INFINITE)
00091                 {
00092                         ret = pthread_mutex_lock(&m_hMutex);
00093                 }
00094                 else
00095                 {
00096                         timespec abstime = { time(0) + uiTimeOut, 0 };
00097                         ret = pthread_mutex_timedlock(&m_hMutex, &abstime);
00098                 }
00099 
00100                 return ! ret;
00101         }
00102 
00103         void unlock()
00104         {
00105                 pthread_mutex_unlock(&m_hMutex);
00106         }
00107 };
00108 //-----------------------------------------------
00109 #endif
00110 


cob_relayboard
Author(s): Christian Connette
autogenerated on Thu Aug 27 2015 12:45:34