Pull request Compare This branch is 499 commits behind ellzey:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
..
Failed to load latest commit information.
Makefile
README
evthr.c
evthr.h
test.c

README

Libevthr is an API which manages threads and thread-pools in an event based
manner. This API requires libevent with threading support.

Libevthr works a bit differently than most thread management systems. Instead of
conditional signalling and some type of pre-thread queue, Libevthr uses a
deferral type mechanism. That is, a thread is always running, abstracted to a
point where you "defer" your function *into* a thread. 

For example you can start up a single thread with a backlog of 10 (a backlog
being the max number of outstanding callbacks to run within the thread), and
execute a function you would like to run inside the thread one or many times.
The act of deferrals is non-blocking. 

Example Code for evthrs:

	evthr_t * thr = evthr_new(10, NULL);
	
	if (evthr_start(thr) < 0) {
		exit(1);
	}

	evthr_defer(thr, my_cb_1, NULL);
	evthr_defer(thr, my_cb_2, NULL);
	evthr_defer(thr, my_cb_3, NULL);

	sleep(n_seconds);

	evthr_stop(thr);

Libevthr also has the ability to create pools using the same methods that a 
single evthr has. For example, if you would like to create 10 threads, each
with a backlog of 5: 

	evthr_pool_t * thr_pool = evthr_pool_new(10, 5, NULL);

	if (evthr_pool_start(thr_pool) < 0) {
		exit(1);
	}

	evthr_pool_defer(thr_pool, my_cb_1, NULL);
	evthr_pool_defer(thr_pool, my_cb_2, NULL);
	evthr_pool_defer(thr_pool, my_cb_3, NULL);

Your callback functions which you defer must be of type "evthr_cb", or 
"void cb_name(void * arg, void * shared)". In this case, the "arg" variable is
the data you passed as the third argument to either evthr_pool_defer, or
evthr_defer. The "shared" variable is the data that was either the second
variable in evthr_new(), or the third variable in evthr_pool_new().

The gist of this is to allow a global dataset, along with deferred specific
data.

See test.c for a quick example.