C-Thread-Pool/README.md

134 lines
3.9 KiB
Markdown
Raw Normal View History

2014-09-21 19:40:20 +04:00
````
Author: Johan Hanssen Seferidis
2011-11-05 16:35:31 +04:00
Created: 2011-08-12
2014-09-21 19:40:20 +04:00
````
2011-11-05 16:35:31 +04:00
2014-09-21 19:40:20 +04:00
Compiling
========================================================================
2014-08-19 19:00:55 +04:00
2011-11-05 16:35:31 +04:00
The library is not precompiled so you have to compile it with your project. The thread pool
uses POSIX threads so if you compile with gcc you have to use the flag -pthread like this:
2014-09-21 19:40:20 +04:00
gcc main.c thpool.c -pthread -o test
2011-11-05 16:35:31 +04:00
Then run the executable like this:
2014-09-21 19:40:20 +04:00
./test
2011-11-05 16:35:31 +04:00
2014-09-21 19:40:20 +04:00
Usage
========================================================================
2011-11-05 16:35:31 +04:00
2014-09-21 19:46:15 +04:00
1. Make a thread pool: `thpool_t* thpool;`
2. Initialise the thread pool with number of threads(workers) you want: `thpool=thpool_init(4);`
3. Add work to the pool: `thpool_add_work(thpool, (void*)doSth, (void*)arg);`
2014-12-30 15:52:14 +03:00
The workers will start their work automatically as fast as there is new work
added. If you want to wait for all added work to be finished before continuing
you can use `thpool_wait(thpool);`. If you want to destroy the pool you can use
`thpool_destroy(thpool);`.
2011-11-05 16:35:31 +04:00
2014-09-21 19:40:20 +04:00
Threadpool Interface
========================================================================
````
2011-11-05 16:35:31 +04:00
NAME
thpool_t* thpool_init(int num_of_threads);
SYNOPSIS
#include <thpool.h>
thpool_t* thpool_init(int num_of_threads);
DESCRIPTION
2014-09-27 14:47:37 +04:00
Initialises the threadpool. On success a threadpool structure is returned.
Otherwise if memory could not be allocated NULL is returned. The argument
which is the number of threads in the threadpool should be a thoughfull
choice. A common suggestion is to use as many threads as the ones supported
by your cpu.
2011-11-05 16:35:31 +04:00
Example:
thpool_t* myThreadpool; //First we declare a threadpool
myThreadpool=thpool_init(4); //then we initialise it to 4 threads
2014-09-21 19:40:20 +04:00
````
2011-11-05 16:35:31 +04:00
-----------------------------------------------------------------------------------
2014-09-21 19:40:20 +04:00
```
2011-11-05 16:35:31 +04:00
NAME
thpool_add_work(thpool_t* thpool, void *(*function_p)(void*), void* arg_p);
2011-11-05 16:35:31 +04:00
SYNOPSIS
#include <thpool.h>
int thpool_add_work(thpool_t* thpool, void *(*function_p)(void*), void* arg_p);
2011-11-05 16:35:31 +04:00
DESCRIPTION
2014-09-27 14:47:37 +04:00
Adds work to the thread pool. Work is concidered an individual function with an
argument. First argument is a pointer to the pool itself. The second argument is
a pointer to a function and third argument is a pointer to an argument. To pass
multiple arguments just use a struct. If the function you want to pass doesn't
fit the parameters of this prototype, use casting. If your function or argument
doesn't fit the parameters' and return's value type then you should use casting
to avoid warnings from the compiler.
2011-11-05 16:35:31 +04:00
Example:
2014-09-27 14:47:37 +04:00
void printSth(char* str); //Prints a text on the screen
thpool_add_work(thpool, (void*)printSth, (void*)str);//Pay attention to the casting
2014-09-21 19:40:20 +04:00
````
2011-11-05 16:35:31 +04:00
2014-12-30 15:52:14 +03:00
-----------------------------------------------------------------------------------
````
NAME
void thpool_wait(thpool_t* tp_p);
SYNOPSIS
#include <thpool.h>
void thpool_wait(thpool_t* tp_p);
DESCRIPTION
This function will block the main thread until all jobs in the the thread pool
has been finished. Polling is being used for this. By default the POLLING_INTERVAL
is set to one second.
Example:
thpool_wait(threadpool_p); //threadpool_p being a pointer to a thpool_t
````
2011-11-05 16:35:31 +04:00
-----------------------------------------------------------------------------------
2014-12-30 15:52:14 +03:00
2014-09-21 19:40:20 +04:00
````
2011-11-05 16:35:31 +04:00
NAME
void thpool_destroy(thpool_t* tp_p);
SYNOPSIS
#include <thpool.h>
void thpool_destroy(thpool_t* tp_p);
DESCRIPTION
2014-09-27 14:47:37 +04:00
This function will destroy a threadpool. If some threads are working in the pool
then thpool_destroy() will wait for them to finish. Once they are finished the
threadpool is deallocated releasing all resources back to the system.
2011-11-05 16:35:31 +04:00
Example:
thpool_destroy(threadpool_p); //threadpool_p being a pointer to a thpool_t
2014-09-21 19:40:20 +04:00
````