threads.run
This commit is contained in:
parent
c2cd319d0c
commit
fa67393723
31
main.c
31
main.c
@ -78,6 +78,34 @@ static size_t threads_parallel(LVM *lvm, void *ud, size_t argn, set_LValueU *hea
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct ThreadsRunCtx {
|
||||
LVM *L;
|
||||
LFunc *func;
|
||||
};
|
||||
static int threads_run_worker(void *arg) {
|
||||
struct ThreadsRunCtx *ctx = arg;
|
||||
|
||||
LRegSet regs = {};
|
||||
lvm_reset_regs(®s);
|
||||
lvm_run(ctx->L, ctx->func, 0, ®s);
|
||||
|
||||
free(ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static size_t threads_run(LVM *lvm, void *ud, size_t argn, set_LValueU *heap, LRegSet *regset) {
|
||||
LFunc *func = (LFunc*) (regset->regs[0].u & ~LTAG_MASK);
|
||||
|
||||
struct ThreadsRunCtx *ctx = calloc(1, sizeof(*ctx));
|
||||
ctx->L = lvm;
|
||||
ctx->func = func;
|
||||
|
||||
thrd_t thrd;
|
||||
thrd_create(&thrd, threads_run_worker, ctx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char* read_full_file(const char *fn) {
|
||||
FILE *f = fn ? fopen(fn, "rb") : stdin;
|
||||
fseek(f, 0, SEEK_END);
|
||||
@ -112,6 +140,9 @@ int main(int argc, char **argv) {
|
||||
ltable_set(threads,
|
||||
lvalue_from_string(lstring_newz("parallel")),
|
||||
lvalue_from_func(lvm_func_from_native(threads_parallel, NULL)));
|
||||
ltable_set(threads,
|
||||
lvalue_from_string(lstring_newz("run")),
|
||||
lvalue_from_func(lvm_func_from_native(threads_run, NULL)));
|
||||
}
|
||||
ltable_set(env,
|
||||
lvalue_from_string(lstring_newz("threads")),
|
||||
|
Loading…
Reference in New Issue
Block a user