Parallel Programming - Stuff happened
[matches/honours.git] / course / semester2 / pprog / assignment1 / mthread / nbody.h
1 #ifndef _NBODY_MTHREAD_H
2 #define _NBODY_MTHREAD_H
3
4
5 #include "../single-thread/nbody.h" //Use original simulation code
6 #include <pthread.h>
7
8 #undef SINGLE_THREADED
9 #define PTHREADED
10
11 #define DEFAULT_WORKING_THREADS 2 
12
13 //#define PERSISTENT_THREADS //If defined, threads will not be continually destroyed and then respawned
14
15
16
17 //Undefine default macros, replace with functions
18 #undef Simulation_Run
19 void Simulation_Run(int argc, char ** argv);
20 #undef QuitProgram
21 void QuitProgram(bool error);
22
23 #undef BeforeDraw
24 void BeforeDraw();
25 #undef AfterDraw
26 void AfterDraw();
27
28
29 void * Compute_Thread(void * system); //Thread - Continuously perform computations for a System of bodies. May spawn additional worker threads.
30
31 #ifdef PERSISTENT_THREADS
32 void * Worker_Thread(void * arg);
33 #else
34 void * Force_Thread(void * system); //Thread - Compute forces for all objects in a system
35 void * Position_Thread(void * system); //Thread - Compute positions for all objects in a system
36 #endif //PERSISTENT_THREADS
37
38 void Thread_Cleanup(void); //Called at program exit to safely join computation thread
39
40 typedef struct
41 {
42         pthread_mutex_t mutex;
43         unsigned threads_busy; // Counter of threads which are busy
44         pthread_cond_t threads_done_cv;
45 } Barrier;
46
47 void Barrier_Init(Barrier * b);
48 void Barrier_Enter(Barrier * b);
49 void Barrier_Leave(Barrier * b);
50 void Barrier_Wait(Barrier * b);
51
52 #endif //_NBODY_MTHREAD_H

UCC git Repository :: git.ucc.asn.au