ScopedRWLock.cpp
Go to the documentation of this file.
00001 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
00002 
00003 // -- BEGIN LICENSE BLOCK ----------------------------------------------
00004 // This file is part of FZIs ic_workspace.
00005 //
00006 // This program is free software licensed under the LGPL
00007 // (GNU LESSER GENERAL PUBLIC LICENSE Version 3).
00008 // You can find a copy of this license in LICENSE folder in the top
00009 // directory of the source code.
00010 //
00011 // © Copyright 2016 FZI Forschungszentrum Informatik, Karlsruhe, Germany
00012 //
00013 // -- END LICENSE BLOCK ------------------------------------------------
00014 
00015 //----------------------------------------------------------------------
00022 //----------------------------------------------------------------------
00023 #include "icl_core_thread/ScopedRWLock.h"
00024 
00025 #include "icl_core_thread/RWLock.h"
00026 
00027 namespace icl_core {
00028 namespace thread {
00029 
00030 ScopedRWLock::ScopedRWLock(RWLock& lock, LockMode lock_mode, bool force)
00031   : m_lock(lock), m_is_locked(false)
00032 {
00033   if (lock_mode == eLM_READ_LOCK)
00034   {
00035     do { m_is_locked = m_lock.readLock(); } while (force && !m_is_locked);
00036   }
00037   else
00038   {
00039     do { m_is_locked = m_lock.writeLock(); } while (force && !m_is_locked);
00040   }
00041 }
00042 
00043 ScopedRWLock::~ScopedRWLock()
00044 {
00045   if (isLocked())
00046   {
00047     m_lock.unlock();
00048   }
00049 }
00050 
00052 #ifdef _IC_BUILDER_DEPRECATED_STYLE_
00053 
00057 bool ScopedRWLock::IsLocked() const
00058 {
00059   return isLocked();
00060 }
00061 
00062 #endif
00063 
00064 
00065 }
00066 }


fzi_icl_core
Author(s):
autogenerated on Thu Jun 6 2019 20:22:24