Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Applied Root formatting style
  • Loading branch information
ihrivnac committed Mar 27, 2017
commit 2b209d9df8de44bb5599e0a76744925a2a7b92f7
110 changes: 51 additions & 59 deletions montecarlo/vmc/inc/TMCAutoLock.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,21 @@
#define TMCMULTITHREADED 1

#if defined(TMCMULTITHREADED)

#include <pthread.h>
typedef pthread_mutex_t TMCMutex;
#define TMCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
#define TMCMUTEXLOCK pthread_mutex_lock
#define TMCMUTEXUNLOCK pthread_mutex_unlock
typedef int (*thread_lock)(TMCMutex*);
typedef int (*thread_unlock)(TMCMutex*);
typedef pthread_mutex_t TMCMutex;
#define TMCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
#define TMCMUTEXLOCK pthread_mutex_lock
#define TMCMUTEXUNLOCK pthread_mutex_unlock
typedef int (*thread_lock)(TMCMutex *);
typedef int (*thread_unlock)(TMCMutex *);
#else
typedef int TMCMutex;
#define TMCMUTEX_INITIALIZER 1
#define TMCMUTEXLOCK fake_mutex_lock_unlock
#define TMCMUTEXUNLOCK fake_mutex_lock_unlock
typedef int (*thread_lock)(TMCMutex*);
typedef int (*thread_unlock)(TMCMutex*);
typedef int TMCMutex;
#define TMCMUTEX_INITIALIZER 1
#define TMCMUTEXLOCK fake_mutex_lock_unlock
#define TMCMUTEXUNLOCK fake_mutex_lock_unlock
typedef int (*thread_lock)(TMCMutex *);
typedef int (*thread_unlock)(TMCMutex *);
#endif

/// \brief Template classe which provides a mechanism to create a mutex and
Expand All @@ -111,58 +111,50 @@
/// Note: Note that G4TemplateAutoLock by itself is not thread-safe and
/// cannot be shared among threads due to the locked switch

template<class M, typename L, typename U>
class TMCTemplateAutoLock
{
public:

TMCTemplateAutoLock(M* mtx, L l, U u) : locked(false), _m(mtx), _l(l), _u(u)
{
lock();
}

virtual ~TMCTemplateAutoLock()
{
unlock();
}

inline void unlock() {
if ( !locked ) return;
_u(_m);
locked = false;
}

inline void lock() {
if ( locked ) return;
_l(_m);
locked = true;
}

private:

// Disable copy and assignement operators
//
TMCTemplateAutoLock( const TMCTemplateAutoLock& rhs );
TMCTemplateAutoLock& operator= ( const TMCTemplateAutoLock& rhs );

private:
bool locked;
M* _m;
L _l;
U _u;
template <class M, typename L, typename U>
class TMCTemplateAutoLock {
public:
TMCTemplateAutoLock(M *mtx, L l, U u) : locked(false), _m(mtx), _l(l), _u(u) { lock(); }

virtual ~TMCTemplateAutoLock() { unlock(); }

inline void unlock()
{
if (!locked) return;
_u(_m);
locked = false;
}

inline void lock()
{
if (locked) return;
_l(_m);
locked = true;
}

private:
// Disable copy and assignement operators
//
TMCTemplateAutoLock(const TMCTemplateAutoLock &rhs);
TMCTemplateAutoLock &operator=(const TMCTemplateAutoLock &rhs);

private:
bool locked;
M *_m;
L _l;
U _u;
};

/// \brief Realization of TMCTemplateAutoLock with TMCMutex
///
/// Extracted from G4AutoLock implementation for Linux

struct TMCImpMutexAutoLock
: public TMCTemplateAutoLock<TMCMutex,thread_lock,thread_unlock>
{
TMCImpMutexAutoLock(TMCMutex* mtx)
: TMCTemplateAutoLock<TMCMutex, thread_lock, thread_unlock>
(mtx, &TMCMUTEXLOCK, &TMCMUTEXUNLOCK) {}
struct TMCImpMutexAutoLock : public TMCTemplateAutoLock<TMCMutex, thread_lock, thread_unlock> {
TMCImpMutexAutoLock(TMCMutex *mtx)
: TMCTemplateAutoLock<TMCMutex, thread_lock, thread_unlock>(mtx, &TMCMUTEXLOCK, &TMCMUTEXUNLOCK)
{
}
};
typedef TMCImpMutexAutoLock TMCAutoLock;

#endif //TMCAUTOLOCK_HH
#endif // TMCAUTOLOCK_HH
2 changes: 1 addition & 1 deletion montecarlo/vmc/inc/TVirtualMCApplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class TVirtualMCApplication : public TNamed {

/// Const Initialize MC application on worker - now deprecated
/// Use new non-const InitOnWorker() instead
virtual void InitForWorker() const {}
virtual void InitForWorker() const {}
/// Const Define actions at the beginning of the worker run if needed - now deprecated
/// Use new non-const BeginRunOnWorker() instead
virtual void BeginWorkerRun() const {}
Expand Down
9 changes: 6 additions & 3 deletions montecarlo/vmc/src/TMCAutoLock.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
//-------------------------------------------------

/// \file TMCAutoLock.cxx
/// \brief Implementation of the TMCAutoLock class
/// \brief Implementation of the TMCAutoLock class
///
/// \author I. Hrivnacova; IPN, Orsay

Expand Down Expand Up @@ -52,6 +52,9 @@

#include "TMCAutoLock.h"

#if ! defined(TMCMULTITHREADED)
int fake_mutex_lock_unlock( TMCMutex* ) { return 0; }
#if !defined(TMCMULTITHREADED)
int fake_mutex_lock_unlock(TMCMutex *)
{
return 0;
}
#endif