Fawkes API  Fawkes Development Version
fawkes::Mutex Class Reference

Mutex mutual exclusion lock. More...

#include <core/threading/mutex.h>

Inheritance diagram for fawkes::Mutex:

Public Types

enum  Type { NORMAL, RECURSIVE }
 Mutex type. More...
 

Public Member Functions

 Mutex (Type type=NORMAL)
 Constructor. More...
 
 ~Mutex ()
 Destructor. More...
 
void lock ()
 Lock this mutex. More...
 
bool try_lock ()
 Tries to lock the mutex. More...
 
void unlock ()
 Unlock the mutex. More...
 
void stopby ()
 Shortly stop by at the mutex. More...
 

Friends

class WaitCondition
 

Detailed Description

Mutex mutual exclusion lock.

This class is used in a multi-threading environment to lock access to resources. This is needed to prevent two threads from modifying a value at the same time or to prevent a thread from getting a dirty copy of a piece of data (the reader reads while a writer is writing, this could leave the data in a state where the reader reads half of the new and half of the old data).

As a rule of thumb you should lock the mutex as short as possible and as long as needed. Locking the mutex too long will lead in a bad performance of the multi-threaded application because many threads are waiting for the lock and are not doing anything useful. If you do not lock enough code (and so serialize it) it will cause pain and errors.

See also
example_mutex_count.cpp
Author
Tim Niemueller

Definition at line 32 of file mutex.h.

Member Enumeration Documentation

◆ Type

Mutex type.

Enumerator
NORMAL 

This type of mutex does not detect deadlock.

RECURSIVE 

A thread attempting to relock this mutex without first unlocking it shall succeed in locking the mutex.

Definition at line 38 of file mutex.h.

Constructor & Destructor Documentation

◆ Mutex()

fawkes::Mutex::Mutex ( Type  type = NORMAL)

Constructor.

Parameters
typemutex type

Definition at line 60 of file mutex.cpp.

References RECURSIVE.

◆ ~Mutex()

fawkes::Mutex::~Mutex ( )

Destructor.

Definition at line 76 of file mutex.cpp.

Member Function Documentation

◆ lock()

void fawkes::Mutex::lock ( )

Lock this mutex.

A call to lock() will block until the lock on the mutex could be aquired. If you want to avoid see consider using try_lock().

Definition at line 89 of file mutex.cpp.

References fawkes::Thread::current_thread().

Referenced by fawkes::LibLogger::add_logger(), fawkes::BlackBoardMemoryManager::alloc(), fawkes::Exception::append(), fawkes::Exception::append_va(), fawkes::openni::HandIfObserver::bb_interface_created(), fawkes::openni::SkelIfObserver::bb_interface_created(), RosLaserScanThread::bb_interface_data_changed(), BBLoggerThread::bb_interface_data_changed(), RosTfThread::bb_interface_reader_removed(), fawkes::BlackBoardInterfaceListener::bbil_remove_writer_interface(), fawkes::Thread::cancel_finalize(), fawkes::CacheLogger::clear(), fawkes::BlackBoardInterfaceManager::close(), fawkes::ModuleManager::close_module(), ColliThread::colli_goto(), ColliThread::colli_relgoto(), ColliThread::colli_stop(), fawkes::Exception::copy_messages(), firevision::FuseClient::disconnect(), fawkes::dynamic_reply_free_cb(), fawkes::FawkesNetworkServerClientSendThread::enqueue(), firevision::FuseClient::enqueue_and_wait(), fawkes::SQLiteConfiguration::exists(), LuaAgentContinuousExecutionThread::fam_event(), JacoBimanualGotoThread::final(), JacoGotoThread::final(), fawkes::BlackBoardMemoryManager::free(), fawkes::SQLiteConfiguration::get_bool(), fawkes::SQLiteConfiguration::get_comment(), fawkes::SQLiteConfiguration::get_default_comment(), fawkes::SQLiteConfiguration::get_float(), fawkes::SQLiteConfiguration::get_int(), fawkes::SQLiteConfiguration::get_string(), fawkes::SQLiteConfiguration::get_type(), fawkes::SQLiteConfiguration::get_uint(), fawkes::DynamicMJPEGStreamWebReply::handle_buffer(), fawkes::RemoteBlackBoard::inbound_received(), fawkes::SQLiteConfiguration::is_default(), fawkes::RemoteBlackBoard::list(), fawkes::RemoteBlackBoard::list_all(), fawkes::SQLiteConfiguration::load(), fawkes::LuaContext::lock(), fawkes::PluginManager::lock(), fawkes::BlackBoardMemoryManager::lock(), fawkes::CacheLogger::lock(), fawkes::MemoryConfiguration::lock(), fawkes::SQLiteConfiguration::lock(), fawkes::LockPtr< fawkes::CLIPSEnvManager >::lock(), LaserAcquisitionThread::lock_if_new_data(), IMUAcquisitionThread::lock_if_new_data(), JoystickAcquisitionThread::lock_if_new_data(), fawkes::LibLogger::log_debug(), fawkes::ConsoleLogger::log_debug(), fawkes::FileLogger::log_debug(), fawkes::SyslogLogger::log_debug(), fawkes::LibLogger::log_error(), fawkes::ConsoleLogger::log_error(), fawkes::FileLogger::log_error(), fawkes::SyslogLogger::log_error(), fawkes::LibLogger::log_info(), fawkes::ConsoleLogger::log_info(), fawkes::FileLogger::log_info(), fawkes::SyslogLogger::log_info(), fawkes::LibLogger::log_warn(), fawkes::ConsoleLogger::log_warn(), fawkes::FileLogger::log_warn(), fawkes::SyslogLogger::log_warn(), JacoOpenraveThread::loop(), SickTiM55xEthernetAcquisitionThread::loop(), LaseEdlAcquisitionThread::loop(), JacoBimanualGotoThread::loop(), HokuyoUrgAcquisitionThread::loop(), JacoGotoThread::loop(), HokuyoUrgGbxAcquisitionThread::loop(), CruizCoreXG1010AcquisitionThread::loop(), JoystickAcquisitionThread::loop(), IMUAcquisitionThread::loop(), MongoLogTransformsThread::loop(), RosLaserScanThread::loop(), LaserFilterThread::loop(), firevision::FuseClient::loop(), BBLoggerThread::loop(), RosTfThread::loop(), LuaAgentContinuousExecutionThread::loop(), ColliThread::loop(), fawkes::NetworkNameResolverThread::loop(), fawkes::FawkesMainThread::loop(), fawkes::FawkesNetworkServerClientSendThread::loop(), fawkes::WebviewJpegStreamProducer::loop(), JacoBimanualGotoThread::move_gripper(), fawkes::MutexLocker::MutexLocker(), fawkes::DynamicMJPEGStreamWebReply::next_chunk(), fawkes::BlackBoardNotifier::notify_of_data_change(), fawkes::BlackBoardNotifier::notify_of_interface_created(), fawkes::BlackBoardNotifier::notify_of_interface_destroyed(), fawkes::BlackBoardNotifier::notify_of_message_received(), fawkes::BlackBoardNotifier::notify_of_reader_added(), fawkes::BlackBoardNotifier::notify_of_reader_removed(), fawkes::BlackBoardNotifier::notify_of_writer_added(), fawkes::BlackBoardNotifier::notify_of_writer_removed(), fawkes::BlackBoardInterfaceManager::open_for_reading(), fawkes::BlackBoardInterfaceManager::open_for_writing(), fawkes::ModuleManager::open_module(), fawkes::BlackBoardInterfaceManager::open_multiple_for_reading(), SickTiM55xCommonAcquisitionThread::parse_datagram(), fawkes::Thread::prepare_finalize(), MongoLogTransformsThread::prepare_finalize_user(), MongoLogImagesThread::prepare_finalize_user(), MongoLogPointCloudThread::prepare_finalize_user(), fawkes::Exception::prepend(), fawkes::Exception::print_trace(), fawkes::openni::SkelIfObserver::process_queue(), fawkes::openni::HandIfObserver::process_queue(), LuaAgentContinuousExecutionThread::read_interfaces(), fawkes::RefCount::ref(), firevision::ImageWidget::refresh_cam(), fawkes::BlackBoardNotifier::register_observer(), fawkes::MutexLocker::relock(), fawkes::LibLogger::remove_logger(), LaserAcquisitionThread::reset_distances(), fawkes::NetworkNameResolverThread::resolve_address(), fawkes::NetworkNameResolverThread::resolve_name(), fawkes::Thread::run(), firevision::ImageWidget::save_image(), fawkes::SQLiteConfiguration::set_bool(), fawkes::SQLiteConfiguration::set_comment(), fawkes::SQLiteConfiguration::set_default_bool(), fawkes::SQLiteConfiguration::set_default_comment(), fawkes::SQLiteConfiguration::set_default_float(), fawkes::SQLiteConfiguration::set_default_int(), fawkes::SQLiteConfiguration::set_default_string(), fawkes::SQLiteConfiguration::set_default_uint(), KatanaSensorAcquisitionThread::set_enabled(), fawkes::SQLiteConfiguration::set_float(), fawkes::SQLiteConfiguration::set_int(), fawkes::FawkesMainThread::set_mainloop_thread(), fawkes::Thread::set_prepfin_hold(), fawkes::SQLiteConfiguration::set_string(), fawkes::SQLiteConfiguration::set_uint(), fawkes::Thread::start(), JacoBimanualGotoThread::stop(), JacoGotoThread::stop(), fawkes::ConsoleLogger::tlog_debug(), fawkes::SyslogLogger::tlog_debug(), fawkes::FileLogger::tlog_debug(), fawkes::ConsoleLogger::tlog_error(), fawkes::SyslogLogger::tlog_error(), fawkes::FileLogger::tlog_error(), fawkes::SyslogLogger::tlog_info(), fawkes::ConsoleLogger::tlog_info(), fawkes::FileLogger::tlog_info(), fawkes::ConsoleLogger::tlog_warn(), fawkes::SyslogLogger::tlog_warn(), fawkes::FileLogger::tlog_warn(), fawkes::RemoteBlackBoard::try_aliveness_restore(), fawkes::RefCount::unref(), KatanaActThread::update_sensor_values(), fawkes::FileLogger::vlog_debug(), fawkes::ConsoleLogger::vlog_debug(), fawkes::SyslogLogger::vlog_debug(), fawkes::LibLogger::vlog_debug(), fawkes::FileLogger::vlog_error(), fawkes::ConsoleLogger::vlog_error(), fawkes::SyslogLogger::vlog_error(), fawkes::LibLogger::vlog_error(), fawkes::SyslogLogger::vlog_info(), fawkes::FileLogger::vlog_info(), fawkes::ConsoleLogger::vlog_info(), fawkes::LibLogger::vlog_info(), fawkes::SyslogLogger::vlog_warn(), fawkes::ConsoleLogger::vlog_warn(), fawkes::FileLogger::vlog_warn(), fawkes::LibLogger::vlog_warn(), fawkes::ConsoleLogger::vtlog_debug(), fawkes::SyslogLogger::vtlog_debug(), fawkes::FileLogger::vtlog_debug(), fawkes::SyslogLogger::vtlog_error(), fawkes::ConsoleLogger::vtlog_error(), fawkes::FileLogger::vtlog_error(), fawkes::SyslogLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_info(), fawkes::FileLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_warn(), fawkes::SyslogLogger::vtlog_warn(), fawkes::FileLogger::vtlog_warn(), firevision::FuseClient::wait(), LaserFilterThread::wait_done(), fawkes::FawkesNetworkServerClientSendThread::wait_for_all_sent(), firevision::FuseClient::wait_greeting(), fawkes::Thread::wait_loop_done(), LuaAgentContinuousExecutionThread::write_interfaces(), fawkes::LuaContext::~LuaContext(), and fawkes::NetworkNameResolverThread::~NetworkNameResolverThread().

◆ stopby()

void fawkes::Mutex::stopby ( )

Shortly stop by at the mutex.

This will just lock and unlock the mutex. It is equivalent to

mutex->lock();
mutex->unlock();

This can be handy if you have to protect starvation and just have a stop-by mutex.

Definition at line 155 of file mutex.cpp.

Referenced by fawkes::Thread::run().

◆ try_lock()

bool fawkes::Mutex::try_lock ( )

Tries to lock the mutex.

This can also be used to check if a mutex is locked. The code for this can be:

bool locked = false;
if ( mutex->try_lock() ) {
mutex->unlock();
locked = true;
}

This cannot be implemented in Mutex in a locked() method since this would lead to race conditions in many situations.

Returns
true, if the mutex could be locked, false otherwise.

Definition at line 120 of file mutex.cpp.

Referenced by fawkes::Thread::join(), fawkes::Thread::running(), fawkes::LuaContext::try_lock(), fawkes::PluginManager::try_lock(), fawkes::BlackBoardMemoryManager::try_lock(), fawkes::MemoryConfiguration::try_lock(), fawkes::SQLiteConfiguration::try_lock(), and fawkes::LockPtr< fawkes::CLIPSEnvManager >::try_lock().

◆ unlock()

void fawkes::Mutex::unlock ( )

Unlock the mutex.

Definition at line 135 of file mutex.cpp.

Referenced by fawkes::LibLogger::add_logger(), fawkes::BlackBoardMemoryManager::alloc(), fawkes::Exception::append(), fawkes::Exception::append_va(), fawkes::openni::HandIfObserver::bb_interface_created(), fawkes::openni::SkelIfObserver::bb_interface_created(), RosLaserScanThread::bb_interface_data_changed(), BBLoggerThread::bb_interface_data_changed(), RosTfThread::bb_interface_reader_removed(), fawkes::BlackBoardInterfaceListener::bbil_remove_writer_interface(), fawkes::Thread::cancel_finalize(), fawkes::CacheLogger::clear(), fawkes::BlackBoardInterfaceManager::close(), fawkes::ModuleManager::close_module(), ColliThread::colli_stop(), fawkes::Exception::copy_messages(), firevision::FuseClient::disconnect(), fawkes::dynamic_reply_free_cb(), fawkes::FawkesNetworkServerClientSendThread::enqueue(), firevision::FuseClient::enqueue_and_wait(), fawkes::SQLiteConfiguration::exists(), LuaAgentContinuousExecutionThread::fam_event(), JacoBimanualGotoThread::final(), JacoGotoThread::final(), fawkes::BlackBoardMemoryManager::free(), fawkes::SQLiteConfiguration::get_bool(), fawkes::SQLiteConfiguration::get_comment(), fawkes::SQLiteConfiguration::get_default_comment(), fawkes::SQLiteConfiguration::get_float(), fawkes::SQLiteConfiguration::get_int(), fawkes::SQLiteConfiguration::get_string(), fawkes::SQLiteConfiguration::get_type(), fawkes::SQLiteConfiguration::get_uint(), fawkes::DynamicMJPEGStreamWebReply::handle_buffer(), fawkes::RemoteBlackBoard::inbound_received(), fawkes::SQLiteConfiguration::is_default(), fawkes::Thread::join(), fawkes::RemoteBlackBoard::list(), fawkes::RemoteBlackBoard::list_all(), fawkes::SQLiteConfiguration::load(), LaserAcquisitionThread::lock_if_new_data(), IMUAcquisitionThread::lock_if_new_data(), JoystickAcquisitionThread::lock_if_new_data(), fawkes::LibLogger::log_debug(), fawkes::ConsoleLogger::log_debug(), fawkes::FileLogger::log_debug(), fawkes::SyslogLogger::log_debug(), fawkes::LibLogger::log_error(), fawkes::SyslogLogger::log_error(), fawkes::ConsoleLogger::log_error(), fawkes::FileLogger::log_error(), fawkes::CacheLogger::log_error(), MongoLogLoggerThread::log_error(), fawkes::LibLogger::log_info(), fawkes::SyslogLogger::log_info(), fawkes::ConsoleLogger::log_info(), fawkes::FileLogger::log_info(), fawkes::LibLogger::log_warn(), fawkes::SyslogLogger::log_warn(), fawkes::ConsoleLogger::log_warn(), fawkes::FileLogger::log_warn(), JacoOpenraveThread::loop(), SickTiM55xEthernetAcquisitionThread::loop(), LaseEdlAcquisitionThread::loop(), JacoBimanualGotoThread::loop(), HokuyoUrgAcquisitionThread::loop(), JacoGotoThread::loop(), CruizCoreXG1010AcquisitionThread::loop(), HokuyoUrgGbxAcquisitionThread::loop(), IMUAcquisitionThread::loop(), JoystickAcquisitionThread::loop(), MongoLogTransformsThread::loop(), RosLaserScanThread::loop(), LaserFilterThread::loop(), firevision::FuseClient::loop(), MongoLogImagesThread::loop(), BBLoggerThread::loop(), RosTfThread::loop(), LuaAgentContinuousExecutionThread::loop(), MongoLogPointCloudThread::loop(), ColliThread::loop(), fawkes::FawkesMainThread::loop(), fawkes::NetworkNameResolverThread::loop(), fawkes::FawkesNetworkServerClientSendThread::loop(), fawkes::WebviewJpegStreamProducer::loop(), fawkes::Thread::loop(), JacoBimanualGotoThread::move_gripper(), fawkes::DynamicMJPEGStreamWebReply::next_chunk(), fawkes::BlackBoardNotifier::notify_of_data_change(), fawkes::BlackBoardNotifier::notify_of_interface_created(), fawkes::BlackBoardNotifier::notify_of_interface_destroyed(), fawkes::BlackBoardNotifier::notify_of_message_received(), fawkes::BlackBoardNotifier::notify_of_reader_added(), fawkes::BlackBoardNotifier::notify_of_reader_removed(), fawkes::BlackBoardNotifier::notify_of_writer_added(), fawkes::BlackBoardNotifier::notify_of_writer_removed(), fawkes::BlackBoardInterfaceManager::open_for_reading(), fawkes::BlackBoardInterfaceManager::open_for_writing(), fawkes::ModuleManager::open_module(), fawkes::BlackBoardInterfaceManager::open_multiple_for_reading(), SickTiM55xCommonAcquisitionThread::parse_datagram(), fawkes::Thread::prepare_finalize(), fawkes::Exception::prepend(), fawkes::Exception::print_trace(), fawkes::openni::HandIfObserver::process_queue(), fawkes::openni::SkelIfObserver::process_queue(), LuaAgentContinuousExecutionThread::read_interfaces(), fawkes::RefCount::ref(), firevision::ImageWidget::refresh_cam(), fawkes::BlackBoardNotifier::register_observer(), fawkes::LibLogger::remove_logger(), LaserAcquisitionThread::reset_distances(), fawkes::NetworkNameResolverThread::resolve_address(), fawkes::NetworkNameResolverThread::resolve_name(), fawkes::Thread::run(), fawkes::Thread::running(), firevision::ImageWidget::save_image(), fawkes::SQLiteConfiguration::set_bool(), fawkes::SQLiteConfiguration::set_comment(), fawkes::SQLiteConfiguration::set_default_bool(), fawkes::SQLiteConfiguration::set_default_comment(), fawkes::SQLiteConfiguration::set_default_float(), fawkes::SQLiteConfiguration::set_default_int(), fawkes::SQLiteConfiguration::set_default_string(), fawkes::SQLiteConfiguration::set_default_uint(), KatanaSensorAcquisitionThread::set_enabled(), fawkes::SQLiteConfiguration::set_float(), fawkes::SQLiteConfiguration::set_int(), fawkes::FawkesMainThread::set_mainloop_thread(), fawkes::Thread::set_prepfin_hold(), fawkes::SQLiteConfiguration::set_string(), fawkes::SQLiteConfiguration::set_uint(), fawkes::Thread::start(), JacoBimanualGotoThread::stop(), JacoGotoThread::stop(), fawkes::SyslogLogger::tlog_debug(), fawkes::ConsoleLogger::tlog_debug(), fawkes::FileLogger::tlog_debug(), fawkes::SyslogLogger::tlog_error(), fawkes::ConsoleLogger::tlog_error(), fawkes::FileLogger::tlog_error(), fawkes::SyslogLogger::tlog_info(), fawkes::ConsoleLogger::tlog_info(), fawkes::FileLogger::tlog_info(), fawkes::ConsoleLogger::tlog_warn(), fawkes::SyslogLogger::tlog_warn(), fawkes::FileLogger::tlog_warn(), fawkes::RemoteBlackBoard::try_aliveness_restore(), fawkes::BlackBoardMemoryManager::try_lock(), fawkes::MutexLocker::unlock(), LaserAcquisitionThread::unlock(), IMUAcquisitionThread::unlock(), JoystickAcquisitionThread::unlock(), fawkes::LuaContext::unlock(), fawkes::PluginManager::unlock(), fawkes::BlackBoardMemoryManager::unlock(), fawkes::CacheLogger::unlock(), fawkes::MemoryConfiguration::unlock(), fawkes::SQLiteConfiguration::unlock(), fawkes::LockPtr< fawkes::CLIPSEnvManager >::unlock(), fawkes::RefCount::unref(), KatanaActThread::update_sensor_values(), fawkes::FileLogger::vlog_debug(), fawkes::ConsoleLogger::vlog_debug(), fawkes::SyslogLogger::vlog_debug(), fawkes::LibLogger::vlog_debug(), fawkes::SyslogLogger::vlog_error(), fawkes::FileLogger::vlog_error(), fawkes::ConsoleLogger::vlog_error(), fawkes::LibLogger::vlog_error(), fawkes::FileLogger::vlog_info(), fawkes::ConsoleLogger::vlog_info(), fawkes::SyslogLogger::vlog_info(), fawkes::LibLogger::vlog_info(), fawkes::FileLogger::vlog_warn(), fawkes::SyslogLogger::vlog_warn(), fawkes::ConsoleLogger::vlog_warn(), fawkes::LibLogger::vlog_warn(), fawkes::ConsoleLogger::vtlog_debug(), fawkes::SyslogLogger::vtlog_debug(), fawkes::FileLogger::vtlog_debug(), fawkes::ConsoleLogger::vtlog_error(), fawkes::SyslogLogger::vtlog_error(), fawkes::FileLogger::vtlog_error(), fawkes::SyslogLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_info(), fawkes::FileLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_warn(), fawkes::SyslogLogger::vtlog_warn(), fawkes::FileLogger::vtlog_warn(), firevision::FuseClient::wait(), LaserFilterThread::wait_done(), fawkes::FawkesNetworkServerClientSendThread::wait_for_all_sent(), firevision::FuseClient::wait_greeting(), fawkes::Thread::wait_loop_done(), LuaAgentContinuousExecutionThread::write_interfaces(), fawkes::BlackBoardInterfaceManager::~BlackBoardInterfaceManager(), fawkes::MutexLocker::~MutexLocker(), and fawkes::NetworkNameResolverThread::~NetworkNameResolverThread().


The documentation for this class was generated from the following files: