Outdated egg!
This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.
If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.
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.
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.
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.
Requirements
None.
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);
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) -> 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 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 pthreads 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