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... | |
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 87 of file mutex.cpp.
References fawkes::Thread::current_thread().
Referenced by PlexilTimerThread::abort_timer(), fawkes::WaitCondition::abstimed_wait(), fawkes::LibLogger::add_logger(), fawkes::BlackBoardMemoryManager::alloc(), fawkes::Exception::append(), fawkes::MessageQueue::append(), fawkes::BoolMutexLocker::BoolMutexLocker(), fawkes::Thread::cancel_finalize(), fawkes::CacheLogger::clear(), fawkes::BlackBoardInterfaceManager::close(), fawkes::ModuleManager::close_module(), ColliThread::colli_goto(), ColliThread::colli_relgoto(), ColliThread::colli_stop(), fawkes::Interface::compare_buffers(), fawkes::FawkesNetworkClient::connect(), fawkes::Interface::copy_private_to_buffer(), fawkes::Interface::copy_shared_to_buffer(), fawkes::FawkesNetworkClient::deregister_handler(), firevision::FuseClient::disconnect(), fawkes::SyncPoint::emit(), fawkes::MessageQueue::empty(), fawkes::FawkesNetworkClientSendThread::enqueue(), fawkes::FawkesNetworkServerClientSendThread::enqueue(), fawkes::FawkesNetworkClient::enqueue_and_wait(), firevision::FuseClient::enqueue_and_wait(), fawkes::SQLiteConfiguration::exists(), LuaAgentContinuousExecutionThread::fam_event(), JacoBimanualGotoThread::final(), JacoGotoThread::final(), fawkes::MessageQueue::flush(), fawkes::BlackBoardMemoryManager::free(), fawkes::NetworkConfiguration::get_bool(), fawkes::SQLiteConfiguration::get_bool(), fawkes::NetworkConfiguration::get_comment(), fawkes::SQLiteConfiguration::get_comment(), fawkes::NetworkConfiguration::get_default_comment(), fawkes::SQLiteConfiguration::get_default_comment(), fawkes::NetworkConfiguration::get_float(), fawkes::SQLiteConfiguration::get_float(), fawkes::NetworkConfiguration::get_int(), fawkes::SQLiteConfiguration::get_int(), fawkes::NetworkConfiguration::get_string(), fawkes::SQLiteConfiguration::get_string(), fawkes::NetworkConfiguration::get_type(), fawkes::SQLiteConfiguration::get_type(), fawkes::NetworkConfiguration::get_uint(), fawkes::SQLiteConfiguration::get_uint(), fawkes::NetworkConfiguration::get_value(), fawkes::DynamicMJPEGStreamWebReply::handle_buffer(), fawkes::FawkesNetworkClient::interrupt_connect(), fawkes::SQLiteConfiguration::is_default(), fawkes::RemoteBlackBoard::list(), fawkes::RemoteBlackBoard::list_all(), fawkes::SQLiteConfiguration::load(), fawkes::BlackBoardMemoryManager::lock(), fawkes::MemoryConfiguration::lock(), fawkes::NetworkConfiguration::lock(), fawkes::SQLiteConfiguration::lock(), fawkes::YamlConfiguration::lock(), fawkes::MessageQueue::lock(), fawkes::CacheLogger::lock(), fawkes::LuaContext::lock(), fawkes::PluginManager::lock(), fawkes::LockPtr< fawkes::CLIPSEnvManager >::lock(), IMUAcquisitionThread::lock_if_new_data(), JoystickAcquisitionThread::lock_if_new_data(), LaserAcquisitionThread::lock_if_new_data(), fawkes::SyncPoint::lock_until_next_wait(), fawkes::LockPtr< T_CppObject >::LockPtr(), 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(), fawkes::FawkesMainThread::loop(), firevision::FuseClient::loop(), fawkes::FawkesNetworkClientSendThread::loop(), fawkes::FawkesNetworkServerClientSendThread::loop(), fawkes::NetworkNameResolverThread::loop(), BBLoggerThread::loop(), ColliThread::loop(), IMUAcquisitionThread::loop(), CruizCoreXG1010AcquisitionThread::loop(), JacoBimanualGotoThread::loop(), JacoGotoThread::loop(), JacoOpenraveThread::loop(), JoystickAcquisitionThread::loop(), LaserFilterThread::loop(), SickTiM55xEthernetAcquisitionThread::loop(), HokuyoUrgAcquisitionThread::loop(), HokuyoUrgGbxAcquisitionThread::loop(), LuaAgentContinuousExecutionThread::loop(), MongoLogTransformsThread::loop(), RosLaserScanThread::loop(), RosTfThread::loop(), fawkes::WebviewJpegStreamProducer::loop(), fawkes::MutexLocker::MutexLocker(), fawkes::DynamicMJPEGStreamWebReply::next_chunk(), fawkes::BlackBoardNotifier::notify_of_data_change(), fawkes::BlackBoardNotifier::notify_of_message_received(), fawkes::BlackBoardInterfaceManager::open_for_reading(), fawkes::BlackBoardInterfaceManager::open_for_writing(), fawkes::ModuleManager::open_module(), fawkes::BlackBoardInterfaceManager::open_multiple_for_reading(), SickTiM55xCommonAcquisitionThread::parse_datagram(), fawkes::MessageQueue::pop(), fawkes::Thread::prepare_finalize(), MongoLogImagesThread::prepare_finalize_user(), MongoLogPointCloudThread::prepare_finalize_user(), MongoLogTransformsThread::prepare_finalize_user(), fawkes::Exception::prepend(), fawkes::Exception::print_trace(), fawkes::openni::HandIfObserver::process_queue(), fawkes::openni::SkelIfObserver::process_queue(), Roomba500::query_sensors(), fawkes::Interface::read(), fawkes::Interface::read_from_buffer(), LuaAgentContinuousExecutionThread::read_interfaces(), Roomba500::read_sensors(), fawkes::RefCount::ref(), fawkes::RefPtr< T_CppObject >::RefPtr(), fawkes::BlackBoardNotifier::register_observer(), fawkes::MutexLocker::relock(), fawkes::BoolMutexLocker::relock(), fawkes::WaitCondition::reltimed_wait(), fawkes::MessageQueue::remove(), fawkes::LibLogger::remove_logger(), LaserAcquisitionThread::reset_distances(), fawkes::Interface::resize_buffers(), fawkes::NetworkNameResolverThread::resolve_address(), fawkes::NetworkNameResolverThread::resolve_name(), fawkes::Thread::run(), 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::NetworkConfiguration::set_mirror_mode(), fawkes::Thread::set_prepfin_hold(), fawkes::SQLiteConfiguration::set_string(), fawkes::SQLiteConfiguration::set_uint(), fawkes::MessageQueue::size(), fawkes::ClingoAccess::start_solving(), fawkes::ClingoAccess::start_solving_blocking(), JacoBimanualGotoThread::stop(), JacoGotoThread::stop(), fawkes::ConsoleLogger::tlog_debug(), fawkes::FileLogger::tlog_debug(), fawkes::SyslogLogger::tlog_debug(), fawkes::ConsoleLogger::tlog_error(), fawkes::FileLogger::tlog_error(), fawkes::SyslogLogger::tlog_error(), fawkes::ConsoleLogger::tlog_info(), fawkes::FileLogger::tlog_info(), fawkes::SyslogLogger::tlog_info(), fawkes::ConsoleLogger::tlog_warn(), fawkes::FileLogger::tlog_warn(), fawkes::SyslogLogger::tlog_warn(), fawkes::YamlConfiguration::unlock(), fawkes::RefCount::unref(), fawkes::ConsoleLogger::vlog_debug(), fawkes::FileLogger::vlog_debug(), fawkes::LibLogger::vlog_debug(), fawkes::SyslogLogger::vlog_debug(), fawkes::ConsoleLogger::vlog_error(), fawkes::FileLogger::vlog_error(), fawkes::LibLogger::vlog_error(), fawkes::SyslogLogger::vlog_error(), fawkes::ConsoleLogger::vlog_info(), fawkes::FileLogger::vlog_info(), fawkes::LibLogger::vlog_info(), fawkes::SyslogLogger::vlog_info(), fawkes::ConsoleLogger::vlog_warn(), fawkes::FileLogger::vlog_warn(), fawkes::LibLogger::vlog_warn(), fawkes::SyslogLogger::vlog_warn(), fawkes::ConsoleLogger::vtlog_debug(), fawkes::FileLogger::vtlog_debug(), fawkes::SyslogLogger::vtlog_debug(), fawkes::ConsoleLogger::vtlog_error(), fawkes::FileLogger::vtlog_error(), fawkes::SyslogLogger::vtlog_error(), fawkes::ConsoleLogger::vtlog_info(), fawkes::FileLogger::vtlog_info(), fawkes::SyslogLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_warn(), fawkes::FileLogger::vtlog_warn(), fawkes::SyslogLogger::vtlog_warn(), fawkes::WaitCondition::wait(), firevision::FuseClient::wait(), fawkes::SyncPoint::wait(), fawkes::FawkesNetworkClient::wait(), LaserFilterThread::wait_done(), fawkes::FawkesNetworkServerClientSendThread::wait_for_all_sent(), firevision::FuseClient::wait_greeting(), fawkes::Thread::wait_loop_done(), fawkes::FawkesNetworkClient::wake(), fawkes::WaitCondition::wake_all(), fawkes::WaitCondition::wake_one(), fawkes::Interface::write(), 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 150 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 117 of file mutex.cpp.
Referenced by fawkes::MessageQueue::begin(), fawkes::MessageQueue::end(), fawkes::FawkesNetworkClientSendThread::force_send(), fawkes::MessageQueue::insert_after(), fawkes::Thread::join(), fawkes::Thread::running(), fawkes::BlackBoardMemoryManager::try_lock(), fawkes::MemoryConfiguration::try_lock(), fawkes::NetworkConfiguration::try_lock(), fawkes::SQLiteConfiguration::try_lock(), fawkes::YamlConfiguration::try_lock(), fawkes::MessageQueue::try_lock(), fawkes::LuaContext::try_lock(), fawkes::PluginManager::try_lock(), and fawkes::LockPtr< fawkes::CLIPSEnvManager >::try_lock().
void fawkes::Mutex::unlock | ( | ) |
Unlock the mutex.
Definition at line 131 of file mutex.cpp.
Referenced by PlexilTimerThread::abort_timer(), fawkes::WaitCondition::abstimed_wait(), fawkes::LibLogger::add_logger(), fawkes::BlackBoardMemoryManager::alloc(), fawkes::Exception::append(), fawkes::MessageQueue::append(), fawkes::MessageQueue::begin(), fawkes::Thread::cancel_finalize(), fawkes::CacheLogger::clear(), fawkes::BlackBoardInterfaceManager::close(), fawkes::ModuleManager::close_module(), ColliThread::colli_stop(), fawkes::Interface::compare_buffers(), fawkes::FawkesNetworkClient::connect(), fawkes::Interface::copy_private_to_buffer(), fawkes::Interface::copy_shared_to_buffer(), fawkes::FawkesNetworkClient::deregister_handler(), firevision::FuseClient::disconnect(), fawkes::SyncPoint::emit(), fawkes::MessageQueue::empty(), fawkes::MessageQueue::end(), fawkes::FawkesNetworkClientSendThread::enqueue(), fawkes::FawkesNetworkServerClientSendThread::enqueue(), fawkes::FawkesNetworkClient::enqueue_and_wait(), firevision::FuseClient::enqueue_and_wait(), fawkes::SQLiteConfiguration::exists(), LuaAgentContinuousExecutionThread::fam_event(), JacoBimanualGotoThread::final(), JacoGotoThread::final(), fawkes::MessageQueue::flush(), fawkes::FawkesNetworkClientSendThread::force_send(), fawkes::BlackBoardMemoryManager::free(), fawkes::NetworkConfiguration::get_bool(), fawkes::SQLiteConfiguration::get_bool(), fawkes::NetworkConfiguration::get_comment(), fawkes::SQLiteConfiguration::get_comment(), fawkes::NetworkConfiguration::get_default_comment(), fawkes::SQLiteConfiguration::get_default_comment(), fawkes::NetworkConfiguration::get_float(), fawkes::SQLiteConfiguration::get_float(), fawkes::NetworkConfiguration::get_int(), fawkes::SQLiteConfiguration::get_int(), fawkes::NetworkConfiguration::get_string(), fawkes::SQLiteConfiguration::get_string(), fawkes::NetworkConfiguration::get_type(), fawkes::SQLiteConfiguration::get_type(), fawkes::NetworkConfiguration::get_uint(), fawkes::SQLiteConfiguration::get_uint(), fawkes::NetworkConfiguration::get_value(), fawkes::DynamicMJPEGStreamWebReply::handle_buffer(), fawkes::MessageQueue::insert_after(), fawkes::FawkesNetworkClient::interrupt_connect(), fawkes::SQLiteConfiguration::is_default(), fawkes::Thread::join(), fawkes::RemoteBlackBoard::list(), fawkes::RemoteBlackBoard::list_all(), fawkes::SQLiteConfiguration::load(), IMUAcquisitionThread::lock_if_new_data(), JoystickAcquisitionThread::lock_if_new_data(), LaserAcquisitionThread::lock_if_new_data(), fawkes::SyncPoint::lock_until_next_wait(), fawkes::LockPtr< T_CppObject >::LockPtr(), 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(), fawkes::FawkesMainThread::loop(), fawkes::Thread::loop(), firevision::FuseClient::loop(), fawkes::FawkesNetworkClientSendThread::loop(), fawkes::FawkesNetworkServerClientSendThread::loop(), fawkes::NetworkNameResolverThread::loop(), BBLoggerThread::loop(), ColliThread::loop(), IMUAcquisitionThread::loop(), CruizCoreXG1010AcquisitionThread::loop(), JacoBimanualGotoThread::loop(), JacoGotoThread::loop(), JacoOpenraveThread::loop(), JoystickAcquisitionThread::loop(), LaserFilterThread::loop(), SickTiM55xEthernetAcquisitionThread::loop(), HokuyoUrgAcquisitionThread::loop(), HokuyoUrgGbxAcquisitionThread::loop(), LuaAgentContinuousExecutionThread::loop(), MongoLogImagesThread::loop(), MongoLogTransformsThread::loop(), RosLaserScanThread::loop(), RosTfThread::loop(), fawkes::WebviewJpegStreamProducer::loop(), fawkes::DynamicMJPEGStreamWebReply::next_chunk(), fawkes::BlackBoardNotifier::notify_of_data_change(), fawkes::BlackBoardNotifier::notify_of_message_received(), fawkes::BlackBoardInterfaceManager::open_for_reading(), fawkes::BlackBoardInterfaceManager::open_for_writing(), fawkes::ModuleManager::open_module(), fawkes::BlackBoardInterfaceManager::open_multiple_for_reading(), SickTiM55xCommonAcquisitionThread::parse_datagram(), fawkes::MessageQueue::pop(), fawkes::Thread::prepare_finalize(), fawkes::Exception::prepend(), fawkes::Exception::print_trace(), fawkes::openni::HandIfObserver::process_queue(), fawkes::openni::SkelIfObserver::process_queue(), Roomba500::query_sensors(), fawkes::Interface::read(), fawkes::Interface::read_from_buffer(), LuaAgentContinuousExecutionThread::read_interfaces(), Roomba500::read_sensors(), fawkes::RefCount::ref(), fawkes::RefPtr< T_CppObject >::RefPtr(), fawkes::BlackBoardNotifier::register_observer(), fawkes::WaitCondition::reltimed_wait(), fawkes::MessageQueue::remove(), fawkes::LibLogger::remove_logger(), LaserAcquisitionThread::reset_distances(), fawkes::Interface::resize_buffers(), fawkes::NetworkNameResolverThread::resolve_address(), fawkes::NetworkNameResolverThread::resolve_name(), fawkes::Thread::run(), fawkes::Thread::running(), 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::NetworkConfiguration::set_mirror_mode(), fawkes::Thread::set_prepfin_hold(), fawkes::SQLiteConfiguration::set_string(), fawkes::SQLiteConfiguration::set_uint(), fawkes::MessageQueue::size(), fawkes::ClingoAccess::start_solving(), fawkes::ClingoAccess::start_solving_blocking(), JacoBimanualGotoThread::stop(), JacoGotoThread::stop(), fawkes::ConsoleLogger::tlog_debug(), fawkes::FileLogger::tlog_debug(), fawkes::SyslogLogger::tlog_debug(), fawkes::ConsoleLogger::tlog_error(), fawkes::FileLogger::tlog_error(), fawkes::SyslogLogger::tlog_error(), fawkes::ConsoleLogger::tlog_info(), fawkes::FileLogger::tlog_info(), fawkes::SyslogLogger::tlog_info(), fawkes::ConsoleLogger::tlog_warn(), fawkes::FileLogger::tlog_warn(), fawkes::SyslogLogger::tlog_warn(), fawkes::BlackBoardMemoryManager::try_lock(), fawkes::BlackBoardMemoryManager::unlock(), fawkes::MemoryConfiguration::unlock(), fawkes::NetworkConfiguration::unlock(), fawkes::SQLiteConfiguration::unlock(), fawkes::YamlConfiguration::unlock(), fawkes::MutexLocker::unlock(), fawkes::MessageQueue::unlock(), fawkes::CacheLogger::unlock(), fawkes::LuaContext::unlock(), fawkes::PluginManager::unlock(), IMUAcquisitionThread::unlock(), JoystickAcquisitionThread::unlock(), LaserAcquisitionThread::unlock(), fawkes::LockPtr< fawkes::CLIPSEnvManager >::unlock(), fawkes::BoolMutexLocker::unlock(), fawkes::RefCount::unref(), fawkes::ConsoleLogger::vlog_debug(), fawkes::FileLogger::vlog_debug(), fawkes::LibLogger::vlog_debug(), fawkes::SyslogLogger::vlog_debug(), fawkes::ConsoleLogger::vlog_error(), fawkes::FileLogger::vlog_error(), fawkes::LibLogger::vlog_error(), fawkes::SyslogLogger::vlog_error(), fawkes::ConsoleLogger::vlog_info(), fawkes::FileLogger::vlog_info(), fawkes::LibLogger::vlog_info(), fawkes::SyslogLogger::vlog_info(), fawkes::ConsoleLogger::vlog_warn(), fawkes::FileLogger::vlog_warn(), fawkes::LibLogger::vlog_warn(), fawkes::SyslogLogger::vlog_warn(), fawkes::ConsoleLogger::vtlog_debug(), fawkes::FileLogger::vtlog_debug(), fawkes::SyslogLogger::vtlog_debug(), fawkes::ConsoleLogger::vtlog_error(), fawkes::FileLogger::vtlog_error(), fawkes::SyslogLogger::vtlog_error(), fawkes::ConsoleLogger::vtlog_info(), fawkes::FileLogger::vtlog_info(), fawkes::SyslogLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_warn(), fawkes::FileLogger::vtlog_warn(), fawkes::SyslogLogger::vtlog_warn(), fawkes::WaitCondition::wait(), firevision::FuseClient::wait(), fawkes::SyncPoint::wait(), fawkes::FawkesNetworkClient::wait(), LaserFilterThread::wait_done(), fawkes::FawkesNetworkServerClientSendThread::wait_for_all_sent(), firevision::FuseClient::wait_greeting(), fawkes::Thread::wait_loop_done(), fawkes::FawkesNetworkClient::wake(), fawkes::WaitCondition::wake_all(), fawkes::WaitCondition::wake_one(), fawkes::Interface::write(), LuaAgentContinuousExecutionThread::write_interfaces(), fawkes::MutexLocker::~MutexLocker(), and fawkes::NetworkNameResolverThread::~NetworkNameResolverThread().