Fawkes API
Fawkes Development Version
|
Mutex mutual exclusion lock. More...
#include <core/threading/mutex.h>
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 |
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.
enum fawkes::Mutex::Type |
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().
void fawkes::Mutex::stopby | ( | ) |
Shortly stop by at the mutex.
This will just lock and unlock the mutex. It is equivalent to
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().
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:
This cannot be implemented in Mutex in a locked() method since this would lead to race conditions in many situations.
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().
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().