ARGoS  3
A parallel, multi-engine simulator for swarm robotics
core/simulator/space/space_multi_thread_balance_length.h
Go to the documentation of this file.
00001 
00011 #ifndef SPACE_MULTI_THREAD_BALANCE_LENGTH_H
00012 #define SPACE_MULTI_THREAD_BALANCE_LENGTH_H
00013 
00014 namespace argos {
00015    class CSpace;
00016 }
00017 
00018 #include <argos3/core/simulator/space/space.h>
00019 
00020 namespace argos {
00021 
00022    class CSpaceMultiThreadBalanceLength : public CSpace {
00023 
00024    public:
00025 
00026       CSpaceMultiThreadBalanceLength() {}
00027       virtual ~CSpaceMultiThreadBalanceLength() {}
00028 
00029       virtual void Init(TConfigurationNode& t_tree);
00030       virtual void Destroy();
00031 
00032       virtual void UpdateControllableEntities();
00033       virtual void UpdatePhysics();
00034       virtual void UpdateMedia() {}
00035 
00036    private:
00037 
00038       void StartThreads();
00039       void DispatchThread(UInt32 un_id);
00040       void SlaveThread(UInt32 un_id);
00041       friend void* LaunchThreadBalanceLength(void* p_data);
00042 
00043    private:
00044 
00046       struct SThreadLaunchData {
00047          UInt32 ThreadId;
00048          CSpaceMultiThreadBalanceLength* Space;
00049          
00050          SThreadLaunchData(UInt32 un_thread_id,
00051                            CSpaceMultiThreadBalanceLength* pc_space) :
00052             ThreadId(un_thread_id),
00053             Space(pc_space) {}
00054       };
00055 
00057       struct STaskData {
00059          size_t Index;
00061          bool Used;
00063          bool Done;
00064 
00066          void Reset();
00067       };
00068 
00070       pthread_t* m_ptThreads;
00071 
00073       SThreadLaunchData** m_psThreadData;
00074 
00076       STaskData m_sTaskData;
00077 
00079       pthread_mutex_t m_tStartSenseControlPhaseMutex;
00081       pthread_mutex_t m_tStartActPhaseMutex;
00083       pthread_mutex_t m_tStartPhysicsPhaseMutex;
00085       pthread_mutex_t m_tFetchTaskMutex;
00086 
00088       pthread_cond_t m_tStartSenseControlPhaseCond;
00090       pthread_cond_t m_tStartActPhaseCond;
00092       pthread_cond_t m_tStartPhysicsPhaseCond;
00094       pthread_cond_t m_tFetchTaskCond;
00095 
00097       UInt32 m_unSenseControlPhaseIdleCounter;
00099       UInt32 m_unActPhaseIdleCounter;
00101       UInt32 m_unPhysicsPhaseIdleCounter;
00102 
00103    };
00104 
00105 }
00106 
00107 #endif