Fawkes API  Fawkes Development Version
fawkes::Mutex Class Reference

Mutex mutual exclusion lock. More...

#include <core/threading/mutex.h>

List of all members.

Public Member Functions

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

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

Constructor & Destructor Documentation

fawkes::Mutex::Mutex ( )

Constructor.

Definition at line 58 of file mutex.cpp.

fawkes::Mutex::~Mutex ( )

Destructor.

Definition at line 65 of file mutex.cpp.


Member Function Documentation

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 78 of file mutex.cpp.

References fawkes::Thread::current_thread().

Referenced by JoystickAcquisitionThread::loop(), JoystickAcquisitionThread::lock_if_new_data(), LaserAcquisitionThread::lock_if_new_data(), firevision::FuseClient::disconnect(), firevision::FuseClient::enqueue_and_wait(), firevision::FuseClient::loop(), firevision::FuseClient::wait(), firevision::FuseClient::wait_greeting(), fawkes::BlackBoardInterfaceManager::open_for_reading(), fawkes::BlackBoardInterfaceManager::open_multiple_for_reading(), fawkes::BlackBoardInterfaceManager::open_for_writing(), fawkes::BlackBoardInterfaceManager::close(), fawkes::BlackBoardNotifier::register_listener(), fawkes::BlackBoardNotifier::register_observer(), fawkes::BlackBoardNotifier::notify_of_data_change(), fawkes::BlackBoardNotifier::notify_of_message_received(), fawkes::RemoteBlackBoard::list_all(), fawkes::NetworkConfiguration::tag(), fawkes::NetworkConfiguration::tags(), fawkes::NetworkConfiguration::get_type(), fawkes::NetworkConfiguration::get_float(), fawkes::NetworkConfiguration::get_uint(), fawkes::NetworkConfiguration::get_int(), fawkes::NetworkConfiguration::get_bool(), fawkes::NetworkConfiguration::get_string(), fawkes::NetworkConfiguration::get_comment(), fawkes::NetworkConfiguration::get_default_comment(), fawkes::NetworkConfiguration::get_value(), fawkes::NetworkConfiguration::set_mirror_mode(), fawkes::NetworkConfiguration::lock(), fawkes::SQLiteConfiguration::load(), fawkes::SQLiteConfiguration::tag(), fawkes::SQLiteConfiguration::tags(), fawkes::SQLiteConfiguration::exists(), fawkes::SQLiteConfiguration::get_type(), fawkes::SQLiteConfiguration::get_comment(), fawkes::SQLiteConfiguration::get_default_comment(), fawkes::SQLiteConfiguration::is_default(), fawkes::SQLiteConfiguration::get_float(), fawkes::SQLiteConfiguration::get_uint(), fawkes::SQLiteConfiguration::get_int(), fawkes::SQLiteConfiguration::get_bool(), fawkes::SQLiteConfiguration::get_string(), fawkes::SQLiteConfiguration::set_float(), fawkes::SQLiteConfiguration::set_uint(), fawkes::SQLiteConfiguration::set_int(), fawkes::SQLiteConfiguration::set_bool(), fawkes::SQLiteConfiguration::set_string(), fawkes::SQLiteConfiguration::set_comment(), fawkes::SQLiteConfiguration::set_default_float(), fawkes::SQLiteConfiguration::set_default_uint(), fawkes::SQLiteConfiguration::set_default_int(), fawkes::SQLiteConfiguration::set_default_bool(), fawkes::SQLiteConfiguration::set_default_string(), fawkes::SQLiteConfiguration::set_default_comment(), fawkes::SQLiteConfiguration::lock(), fawkes::Exception::prepend(), fawkes::Exception::append(), fawkes::Exception::print_trace(), fawkes::MutexLocker::MutexLocker(), fawkes::MutexLocker::relock(), fawkes::Thread::prepare_finalize(), fawkes::Thread::cancel_finalize(), fawkes::Thread::set_prepfin_hold(), fawkes::Thread::run(), fawkes::ThreadList::prepare_finalize(), fawkes::ThreadList::cancel_finalize(), fawkes::WaitCondition::wait(), fawkes::WaitCondition::abstimed_wait(), fawkes::WaitCondition::reltimed_wait(), fawkes::WaitCondition::wake_one(), fawkes::WaitCondition::wake_all(), fawkes::RefCount::ref(), fawkes::RefCount::unref(), fawkes::RefPtr::RefPtr(), fawkes::MessageQueue::flush(), fawkes::MessageQueue::append(), fawkes::MessageQueue::remove(), fawkes::MessageQueue::size(), fawkes::MessageQueue::empty(), fawkes::MessageQueue::lock(), fawkes::MessageQueue::pop(), fawkes::FawkesNetworkClientSendThread::loop(), fawkes::FawkesNetworkClientSendThread::enqueue(), fawkes::FawkesNetworkClient::connect(), fawkes::FawkesNetworkClient::interrupt_connect(), fawkes::FawkesNetworkClient::enqueue_and_wait(), fawkes::FawkesNetworkClient::deregister_handler(), fawkes::FawkesNetworkClient::wait(), fawkes::FawkesNetworkClient::wake(), fawkes::FawkesNetworkServerClientSendThread::loop(), fawkes::FawkesNetworkServerClientSendThread::enqueue(), fawkes::FawkesNetworkServerClientSendThread::wait_for_all_sent(), fawkes::NetworkNameResolverThread::~NetworkNameResolverThread(), fawkes::NetworkNameResolverThread::resolve_name(), fawkes::NetworkNameResolverThread::loop(), fawkes::CacheLogger::clear(), fawkes::CacheLogger::lock(), fawkes::ConsoleLogger::vlog_debug(), fawkes::ConsoleLogger::vlog_info(), fawkes::ConsoleLogger::vlog_warn(), fawkes::ConsoleLogger::vlog_error(), fawkes::ConsoleLogger::log_debug(), fawkes::ConsoleLogger::log_info(), fawkes::ConsoleLogger::log_warn(), fawkes::ConsoleLogger::log_error(), fawkes::ConsoleLogger::tlog_debug(), fawkes::ConsoleLogger::tlog_info(), fawkes::ConsoleLogger::tlog_warn(), fawkes::ConsoleLogger::tlog_error(), fawkes::ConsoleLogger::vtlog_debug(), fawkes::ConsoleLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_warn(), fawkes::ConsoleLogger::vtlog_error(), fawkes::FileLogger::log_debug(), fawkes::FileLogger::log_info(), fawkes::FileLogger::log_warn(), fawkes::FileLogger::log_error(), fawkes::FileLogger::vlog_debug(), fawkes::FileLogger::vlog_info(), fawkes::FileLogger::vlog_warn(), fawkes::FileLogger::vlog_error(), fawkes::FileLogger::tlog_debug(), fawkes::FileLogger::tlog_info(), fawkes::FileLogger::tlog_warn(), fawkes::FileLogger::tlog_error(), fawkes::FileLogger::vtlog_debug(), fawkes::FileLogger::vtlog_info(), fawkes::FileLogger::vtlog_warn(), fawkes::FileLogger::vtlog_error(), fawkes::LibLogger::add_logger(), fawkes::LibLogger::remove_logger(), fawkes::LibLogger::log_debug(), fawkes::LibLogger::log_info(), fawkes::LibLogger::log_warn(), fawkes::LibLogger::log_error(), fawkes::LibLogger::vlog_debug(), fawkes::LibLogger::vlog_info(), fawkes::LibLogger::vlog_warn(), fawkes::LibLogger::vlog_error(), fawkes::ModuleManagerTemplate::open_module(), fawkes::ModuleManagerTemplate::close_module(), FawkesMainThread::set_mainloop_thread(), FawkesMainThread::loop(), BBLoggerThread::loop(), KatanaSensorAcquisitionThread::set_enabled(), HokuyoUrgAcquisitionThread::loop(), and HokuyoUrgGbxAcquisitionThread::loop().

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 144 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:

 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 109 of file mutex.cpp.

Referenced by fawkes::NetworkConfiguration::try_lock(), fawkes::SQLiteConfiguration::try_lock(), fawkes::Thread::join(), fawkes::Thread::running(), fawkes::MessageQueue::insert_after(), fawkes::MessageQueue::try_lock(), fawkes::MessageQueue::begin(), fawkes::MessageQueue::end(), and fawkes::FawkesNetworkClientSendThread::force_send().

void fawkes::Mutex::unlock ( )

Unlock the mutex.

Definition at line 124 of file mutex.cpp.

Referenced by JoystickAcquisitionThread::loop(), JoystickAcquisitionThread::lock_if_new_data(), JoystickAcquisitionThread::unlock(), LaserAcquisitionThread::lock_if_new_data(), LaserAcquisitionThread::unlock(), firevision::FuseClient::disconnect(), firevision::FuseClient::enqueue_and_wait(), firevision::FuseClient::loop(), firevision::FuseClient::wait(), firevision::FuseClient::wait_greeting(), fawkes::BlackBoardInterfaceManager::open_for_reading(), fawkes::BlackBoardInterfaceManager::open_multiple_for_reading(), fawkes::BlackBoardInterfaceManager::open_for_writing(), fawkes::BlackBoardInterfaceManager::close(), fawkes::BlackBoardNotifier::register_listener(), fawkes::BlackBoardNotifier::register_observer(), fawkes::BlackBoardNotifier::notify_of_data_change(), fawkes::BlackBoardNotifier::notify_of_message_received(), fawkes::RemoteBlackBoard::list_all(), fawkes::NetworkConfiguration::tag(), fawkes::NetworkConfiguration::tags(), fawkes::NetworkConfiguration::get_type(), fawkes::NetworkConfiguration::get_float(), fawkes::NetworkConfiguration::get_uint(), fawkes::NetworkConfiguration::get_int(), fawkes::NetworkConfiguration::get_bool(), fawkes::NetworkConfiguration::get_string(), fawkes::NetworkConfiguration::get_comment(), fawkes::NetworkConfiguration::get_default_comment(), fawkes::NetworkConfiguration::get_value(), fawkes::NetworkConfiguration::set_mirror_mode(), fawkes::NetworkConfiguration::unlock(), fawkes::SQLiteConfiguration::load(), fawkes::SQLiteConfiguration::tag(), fawkes::SQLiteConfiguration::tags(), fawkes::SQLiteConfiguration::exists(), fawkes::SQLiteConfiguration::get_type(), fawkes::SQLiteConfiguration::get_comment(), fawkes::SQLiteConfiguration::get_default_comment(), fawkes::SQLiteConfiguration::is_default(), fawkes::SQLiteConfiguration::get_float(), fawkes::SQLiteConfiguration::get_uint(), fawkes::SQLiteConfiguration::get_int(), fawkes::SQLiteConfiguration::get_bool(), fawkes::SQLiteConfiguration::get_string(), fawkes::SQLiteConfiguration::set_float(), fawkes::SQLiteConfiguration::set_uint(), fawkes::SQLiteConfiguration::set_int(), fawkes::SQLiteConfiguration::set_bool(), fawkes::SQLiteConfiguration::set_string(), fawkes::SQLiteConfiguration::set_comment(), fawkes::SQLiteConfiguration::set_default_float(), fawkes::SQLiteConfiguration::set_default_uint(), fawkes::SQLiteConfiguration::set_default_int(), fawkes::SQLiteConfiguration::set_default_bool(), fawkes::SQLiteConfiguration::set_default_string(), fawkes::SQLiteConfiguration::set_default_comment(), fawkes::SQLiteConfiguration::unlock(), fawkes::Exception::prepend(), fawkes::Exception::append(), fawkes::Exception::print_trace(), fawkes::MutexLocker::~MutexLocker(), fawkes::MutexLocker::unlock(), fawkes::Thread::prepare_finalize(), fawkes::Thread::cancel_finalize(), fawkes::Thread::join(), fawkes::Thread::set_prepfin_hold(), fawkes::Thread::running(), fawkes::Thread::run(), fawkes::ThreadList::prepare_finalize(), fawkes::ThreadList::cancel_finalize(), fawkes::WaitCondition::wait(), fawkes::WaitCondition::abstimed_wait(), fawkes::WaitCondition::reltimed_wait(), fawkes::WaitCondition::wake_one(), fawkes::WaitCondition::wake_all(), fawkes::RefCount::ref(), fawkes::RefCount::unref(), fawkes::RefPtr::RefPtr(), fawkes::MessageQueue::flush(), fawkes::MessageQueue::append(), fawkes::MessageQueue::insert_after(), fawkes::MessageQueue::remove(), fawkes::MessageQueue::size(), fawkes::MessageQueue::empty(), fawkes::MessageQueue::unlock(), fawkes::MessageQueue::pop(), fawkes::MessageQueue::begin(), fawkes::MessageQueue::end(), fawkes::FawkesNetworkClientSendThread::loop(), fawkes::FawkesNetworkClientSendThread::force_send(), fawkes::FawkesNetworkClientSendThread::enqueue(), fawkes::FawkesNetworkClient::connect(), fawkes::FawkesNetworkClient::interrupt_connect(), fawkes::FawkesNetworkClient::enqueue_and_wait(), fawkes::FawkesNetworkClient::deregister_handler(), fawkes::FawkesNetworkClient::wait(), fawkes::FawkesNetworkClient::wake(), fawkes::FawkesNetworkServerClientSendThread::loop(), fawkes::FawkesNetworkServerClientSendThread::enqueue(), fawkes::FawkesNetworkServerClientSendThread::wait_for_all_sent(), fawkes::NetworkNameResolverThread::~NetworkNameResolverThread(), fawkes::NetworkNameResolverThread::resolve_name(), fawkes::NetworkNameResolverThread::resolve_address(), fawkes::NetworkNameResolverThread::loop(), fawkes::CacheLogger::clear(), fawkes::CacheLogger::unlock(), fawkes::ConsoleLogger::vlog_debug(), fawkes::ConsoleLogger::vlog_info(), fawkes::ConsoleLogger::vlog_warn(), fawkes::ConsoleLogger::vlog_error(), fawkes::ConsoleLogger::log_debug(), fawkes::ConsoleLogger::log_info(), fawkes::ConsoleLogger::log_warn(), fawkes::ConsoleLogger::log_error(), fawkes::ConsoleLogger::tlog_debug(), fawkes::ConsoleLogger::tlog_info(), fawkes::ConsoleLogger::tlog_warn(), fawkes::ConsoleLogger::tlog_error(), fawkes::ConsoleLogger::vtlog_debug(), fawkes::ConsoleLogger::vtlog_info(), fawkes::ConsoleLogger::vtlog_warn(), fawkes::ConsoleLogger::vtlog_error(), fawkes::FileLogger::log_debug(), fawkes::FileLogger::log_info(), fawkes::FileLogger::log_warn(), fawkes::FileLogger::log_error(), fawkes::FileLogger::vlog_debug(), fawkes::FileLogger::vlog_info(), fawkes::FileLogger::vlog_warn(), fawkes::FileLogger::vlog_error(), fawkes::FileLogger::tlog_debug(), fawkes::FileLogger::tlog_info(), fawkes::FileLogger::tlog_warn(), fawkes::FileLogger::tlog_error(), fawkes::FileLogger::vtlog_debug(), fawkes::FileLogger::vtlog_info(), fawkes::FileLogger::vtlog_warn(), fawkes::FileLogger::vtlog_error(), fawkes::LibLogger::add_logger(), fawkes::LibLogger::remove_logger(), fawkes::LibLogger::log_debug(), fawkes::LibLogger::log_info(), fawkes::LibLogger::log_warn(), fawkes::LibLogger::log_error(), fawkes::LibLogger::vlog_debug(), fawkes::LibLogger::vlog_info(), fawkes::LibLogger::vlog_warn(), fawkes::LibLogger::vlog_error(), fawkes::ModuleManagerTemplate::open_module(), fawkes::ModuleManagerTemplate::close_module(), FawkesMainThread::set_mainloop_thread(), FawkesMainThread::loop(), BBLoggerThread::loop(), KatanaSensorAcquisitionThread::set_enabled(), HokuyoUrgAcquisitionThread::loop(), and HokuyoUrgGbxAcquisitionThread::loop().


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