You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.

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

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) -> 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.

Examples

       (define sqlite3-start-prepare
         (foreign-lambda*
          void
          ((<sqlite3-prepare-args> s) (nonnull-c-pointer callback))
          "start_asynchronous_request(
            pthread_sqlite3_prepare, s, callback);"))

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