You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/12/04 21:04:18 UTC
svn commit: r1042231 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent:
Mutex.cpp Mutex.h
Author: tabish
Date: Sat Dec 4 20:04:18 2010
New Revision: 1042231
URL: http://svn.apache.org/viewvc?rev=1042231&view=rev
Log:
Allow a Mutex to have a unique name.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.cpp?rev=1042231&r1=1042230&r2=1042231&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.cpp Sat Dec 4 20:04:18 2010
@@ -19,6 +19,7 @@
#include <decaf/internal/util/concurrent/MutexImpl.h>
#include <decaf/internal/util/concurrent/ConditionImpl.h>
+#include <decaf/lang/Integer.h>
#include <list>
@@ -28,6 +29,7 @@ using namespace decaf::internal::util;
using namespace decaf::internal::util::concurrent;
using namespace decaf::util;
using namespace decaf::util::concurrent;
+using namespace decaf::lang;
using namespace decaf::lang::exceptions;
////////////////////////////////////////////////////////////////////////////////
@@ -38,21 +40,40 @@ namespace concurrent{
class MutexProperties {
public:
- MutexProperties() {}
+ MutexProperties( const std::string& name ) : mutex( NULL ), condition( NULL ), name( name ) {
+ if( this->name.empty() ) {
+ this->name = std::string( "Mutex-" ) + Integer::toString( ++id );
+ }
+ }
// The Platform Mutex object and an associated Condition Object
// for use in the wait / notify pattern.
MutexHandle* mutex;
ConditionHandle* condition;
+ std::string name;
+
+ static unsigned int id;
};
+ unsigned int MutexProperties::id = 0;
+
}}}
////////////////////////////////////////////////////////////////////////////////
-Mutex::Mutex() {
+Mutex::Mutex() : Synchronizable(), properties( NULL ) {
+
+ this->properties = new MutexProperties("");
+
+ // Allocate the OS Mutex Implementation.
+ this->properties->mutex = MutexImpl::create();
+ this->properties->condition = ConditionImpl::create( this->properties->mutex );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Mutex::Mutex( const std::string& name ) : Synchronizable(), properties( NULL ) {
- this->properties = new MutexProperties();
+ this->properties = new MutexProperties( name );
// Allocate the OS Mutex Implementation.
this->properties->mutex = MutexImpl::create();
@@ -61,6 +82,7 @@ Mutex::Mutex() {
////////////////////////////////////////////////////////////////////////////////
Mutex::~Mutex() {
+
unlock();
ConditionImpl::destroy( this->properties->condition );
@@ -70,32 +92,37 @@ Mutex::~Mutex() {
}
////////////////////////////////////////////////////////////////////////////////
-void Mutex::lock() {
+std::string Mutex::getName() const {
+ return this->properties->name;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string Mutex::toString() const {
+ return this->properties->name;
+}
+////////////////////////////////////////////////////////////////////////////////
+void Mutex::lock() {
MutexImpl::lock( this->properties->mutex );
}
////////////////////////////////////////////////////////////////////////////////
bool Mutex::tryLock() {
-
return MutexImpl::trylock( this->properties->mutex );
}
////////////////////////////////////////////////////////////////////////////////
void Mutex::unlock() {
-
MutexImpl::unlock( this->properties->mutex );
}
////////////////////////////////////////////////////////////////////////////////
void Mutex::wait() {
-
ConditionImpl::wait( this->properties->condition );
}
////////////////////////////////////////////////////////////////////////////////
void Mutex::wait( long long millisecs ) {
-
wait( millisecs, 0 );
}
@@ -117,12 +144,10 @@ void Mutex::wait( long long millisecs, i
////////////////////////////////////////////////////////////////////////////////
void Mutex::notify() {
-
ConditionImpl::notify( this->properties->condition );
}
////////////////////////////////////////////////////////////////////////////////
void Mutex::notifyAll() {
-
ConditionImpl::notifyAll( this->properties->condition );
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h?rev=1042231&r1=1042230&r2=1042231&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h Sat Dec 4 20:04:18 2010
@@ -50,8 +50,16 @@ namespace concurrent{
Mutex();
+ Mutex( const std::string& name );
+
virtual ~Mutex();
+ std::string getName() const;
+
+ std::string toString() const;
+
+ public: // Synchronizable API Implementation
+
virtual void lock();
virtual bool tryLock();