595012637908739db12a6932b15d94ec56cd7bed
[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 //Undefine default macros, replace with functions
16 #undef Simulation_Run
17 void Simulation_Run(int argc, char ** argv);
18 #undef QuitProgram
19 void QuitProgram(bool error);
20
21 #undef BeforeDraw
22 void BeforeDraw();
23 #undef AfterDraw
24 void AfterDraw();
25
26
27 void * Compute_Thread(void * system); //Thread - Continuously perform computations for a System of bodies. May spawn additional worker threads.
28
29 void * Force_Thread(void * system); //Thread - Compute forces for all objects in a system
30 void * Position_Thread(void * system); //Thread - Compute positions for all objects in a system
31
32
33
34 void Thread_Cleanup(void); //Called at program exit to safely join computation thread
35
36 typedef struct
37 {
38         pthread_mutex_t mutex;
39         unsigned threads_busy; // Counter of threads which are busy
40         pthread_cond_t threads_done_cv;
41 } Barrier;
42
43 void Barrier_Init(Barrier * b);
44 void Barrier_Enter(Barrier * b);
45 void Barrier_Leave(Barrier * b);
46 void Barrier_Wait(Barrier * b);
47
48 #endif //_NBODY_MTHREAD_H

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