Maintain and talk to a pthread pool.
Most of the egg's work is done in the startup: a pool of pthreads waiting for a job is initialized.
Only code having a C calling convention can be sent to the pool (and asynchronously call back to Scheme). Scheme code runs in the CHICKEN thread.
- 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.
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);
Send function to be executed at any thread of the pool. Function must accept one argument, the data. Callback must be a C_GC_ROOT object holding the procedure to receive the result for function.[procedure] void C_interrupt_call(void *callback, void *result, void *value)
Tell CHICKEN to call the procedure held in the C_GC_ROOT object callback on the result of applying the C_GC_ROOT object result to value.
Predecessor of concurrent-native-callbacks - it may be easier to use the latter.
Scheme[procedure] (pool-send! JOB DATA CALLBACK) -> undefined
All 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 value returned by JOB.
- 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
Jörg F. Wittenberger
The pthreads egg repository is maintained on github.
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.