mirror of
https://github.com/Pithikos/C-Thread-Pool
synced 2024-11-22 05:31:18 +03:00
Moved design notes from headers to ownf ile
This commit is contained in:
parent
fcb69261b2
commit
d301f761c4
52
docs/Design.md
Normal file
52
docs/Design.md
Normal file
@ -0,0 +1,52 @@
|
||||
## 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.
|
Loading…
Reference in New Issue
Block a user