## High level
	
	Description: Library providing a threading pool where you can add work on the fly. The number
	             of threads in the pool is adjustable when creating the pool. In most cases
	             this should equal the number of threads supported by your cpu.
	         
	             For an example on how to use the threadpool, check the main.c file or just read
	             the documentation found in the README.md file.
	
	             In this header file a detailed overview of the functions and the threadpool's logical
	             scheme is presented in case you wish to tweak or alter something. 
	
	
	
	              _______________________________________________________        
	            /                                                       \
	            |   JOB QUEUE        | job1 | job2 | job3 | job4 | ..   |
	            |                                                       |
	            |   threadpool      | thread1 | thread2 | ..            |
	            \_______________________________________________________/
	
	
	   Description:       Jobs are added to the job queue. Once a thread in the pool
	                      is idle, it is assigned with the first job from the queue(and
	                      erased from the queue). It's each thread's job to read from 
	                      the queue serially(using lock) and executing each job
	                      until the queue is empty.
	
	
	   Scheme:
	
	   thpool______                jobqueue____                      ______ 
	   |           |               |           |       .----------->|_job0_| Newly added job
	   |           |               |  rear  ----------'             |_job1_|
	   | jobqueue----------------->|           |                    |_job2_|
	   |           |               |  front ----------.             |__..__| 
	   |___________|               |___________|       '----------->|_jobn_| Job for thread to take
	
	
	   job0________ 
	   |           |
	   | function---->
	   |           |
	   |   arg------->
	   |           |         job1________ 
	   |  next-------------->|           |
	   |___________|         |           |..


## Synchronisation

*Mutexes* and *binary semaphores* are the main tools to achieve synchronisation between threads.
