You are looking at historical revision 33105 of this page. It may differ significantly from its current revision.
pthreads
Maintain and talk to a pthread pool.
Overview
Most of the egg's work is done in the startup: a pool of pthreads waiting for a job is initialized.
Issues
- Requires recent chicken version 4.11 or at least git master rev. 8294683 of 2016-01-14
- Starts currently 5 pthreads. TBD: make this configurable and start as many threads a the operating system configured processors are available.
- The Scheme API is not yet tested.
- Implementation inherits obsolete code. (A dysfunctional - but actively used- return value conversion to be removed in favor of performance.)
API
C
[syntax] typedef int (*C_pthread_request_function_t)(void *);[procedure] extern int start_asynchronous_request(C_pthread_request_function_t function, void *data, void *callback);
Scheme
[procedure] (pool-send! JOB DATA CALLBACK) -> undefinedAll arguments given as non-null-c-pointer.
JOB: The C procedure to call
DATA: Opaque pointer for parameter passing.
CALLBACK: Pointer to callback procedure wrapped in a C_GC_ROOT. The callback is called with the fixnum value returned by JOB.
Examples
- sqlite3pth egg repository on github.
(define sqlite3-start-prepare (foreign-lambda* void ((<sqlite3-prepare-args> s) (nonnull-c-pointer callback)) "start_asynchronous_request( pthread_sqlite3_prepare, s, callback);"))
- Ask the author for alpha code running fuse on pthreads.
About this egg
Author
Jörg F. Wittenberger
Source Code
The pthreds egg repository is maintained on github.
Version History
Version 0.1: Initial import.
Before: This code was ported from an RScheme module of the same author several years ago. Since it's been used in Askemos/BALL. Years later, in 2010, it was converted into an module of it's own.
License
BSD