X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=course%2Fsemester2%2Fpprog%2Fassignment1%2Fmthread%2Fnbody.h;h=9948e5240900449c4b14a0a08dc7961cd95a3007;hb=20979b1c07eda73b7f86b2fe8cb66eb58d959e04;hp=7abe52504edb50343d6af1e4cc673216f4e48f2f;hpb=46fe12165ce898eb47d2a2b9ce9945dbd65987a6;p=matches%2Fhonours.git diff --git a/course/semester2/pprog/assignment1/mthread/nbody.h b/course/semester2/pprog/assignment1/mthread/nbody.h index 7abe5250..9948e524 100644 --- a/course/semester2/pprog/assignment1/mthread/nbody.h +++ b/course/semester2/pprog/assignment1/mthread/nbody.h @@ -4,6 +4,7 @@ #include "../single-thread/nbody.h" //Use original simulation code #include +#include "barrier.h" // Barriers #undef SINGLE_THREADED #define PTHREADED @@ -28,25 +29,22 @@ void AfterDraw(); void * Compute_Thread(void * system); //Thread - Continuously perform computations for a System of bodies. May spawn additional worker threads. + + + +System * Split_System(System * s, unsigned n); // Splits one system into a number of other systems, returns an array of size n +pthread_t * Allocate_Threads(unsigned n); // Allocates space for threads - handles errors + #ifdef PERSISTENT_THREADS void * Worker_Thread(void * arg); -#else +#endif //PERSISTENT_THREADS void * Force_Thread(void * system); //Thread - Compute forces for all objects in a system void * Position_Thread(void * system); //Thread - Compute positions for all objects in a system -#endif //PERSISTENT_THREADS void Thread_Cleanup(void); //Called at program exit to safely join computation thread -typedef struct -{ - pthread_mutex_t mutex; - unsigned threads_busy; // Counter of threads which are busy - pthread_cond_t threads_done_cv; -} Barrier; - -void Barrier_Init(Barrier * b); -void Barrier_Enter(Barrier * b); -void Barrier_Leave(Barrier * b); -void Barrier_Wait(Barrier * b); + + +void * StepFunction(void * s); //Function called at the end of every step #endif //_NBODY_MTHREAD_H