- Notifications
You must be signed in to change notification settings - Fork40
©️ Concurrent Programming Library (Coroutine) for C11
License
NotificationsYou must be signed in to change notification settings
sharow/libconcurrent
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
tiny asymmetric-coroutine library.
- asymmetric-coroutine
- bidirectional communication by
yield_value
/resume_value
- native context switch
- C11
x86_64 | i686 | ARM(v6/v7) | AArch64 | (contributor) | |
---|---|---|---|---|---|
Linux | ✔️ | ✔️ | ✔️ | ✔️ | |
FreeBSD | ✔️ | ✔️ | ❓ | ❓ | @t6 |
OSX | ✔️ | ✖️ | ✖️ | ✔️ | @kpamnany |
(contributor) | @mitghi |
#include<stdio.h>#include<stdlib.h>#include<stdint.h>#include<stdnoreturn.h>#include<concurrent/concurrent.h>#include<concurrent/shortname.h>#defineSTACK_SIZE (1024 * 2)noreturnvoidaccumulator(structconcurrent_ctx*ctx){int*v=ctx_get_resume_value(ctx);inttotal=*v;for (;;) {v=yield_value(ctx,&total);// send total / receive next valuetotal+=*v; }}intmain(void){structconcurrent_ctx*ctx;uint8_tstack[STACK_SIZE];uint8_tctx_alloc[ctx_sizeof()];concurrent_init();ctx= (structconcurrent_ctx*)ctx_alloc;ctx_construct(ctx,stack,STACK_SIZE,accumulator,NULL);for (inti=1;i <=10;i++) {int*total=resume_value(ctx,&i);// send value / receive totalprintf("total = %d\n",*total); }ctx_destruct(ctx);concurrent_fin();returnEXIT_SUCCESS;}/*$ gcc -o sample sample.c -lconcurrent.a$ ./sampletotal = 1total = 3total = 6total = 10total = 15total = 21total = 28total = 36total = 45total = 55*/
- for x86_64/i686:nasm
$ git clone https://github.com/sharow/libconcurrent.git libconcurrent$ cd libconcurrent$ make$ sudo make install
Available in ports collection asdevel/libconcurrent
$ brew install nasm
$ make test
-- output: (Xeon E3 2.5Ghz)3000000 context switch in 373.5 msone context switch in 125 ns8031333 resume/yield pair per second-- output: (RaspberryPi2 ARMv7 900MHz)3000000 context switch in 2861.8 msone context switch in 954 ns1048287 resume/yield pair per second
- Portable Coroutine Library (PCL):http://xmailserver.org/libpcl.html
- libtask:https://code.google.com/p/libtask/
- libconcurrency:http://code.google.com/p/libconcurrency/
- libcoro:http://software.schmorp.de/pkg/libcoro.html
- libcoroutine:https://github.com/stevedekorte/coroutine
- coro:http://www.goron.de/~froese/coro/
- libfiber:http://www.rkeene.org/projects/info/wiki/22
- mill:https://github.com/sustrik/mill
- fcontext:https://github.com/reginaldl/fcontext
- libwire:https://github.com/baruch/libwire
- coroutine(A asymmetric coroutine library for C):https://github.com/cloudwu/coroutine
- coroutine(a asymmetric coroutine (lua like) with fixed-size stack):https://github.com/xphh/coroutine
- coroutine(coroutine library with pthread-like interface in pure C):https://github.com/Marcus366/coroutine
- coroutines(A lightweight coroutine library written in C and assembler):https://github.com/xya/coroutines
- micro:https://github.com/mikewei/micoro
About
©️ Concurrent Programming Library (Coroutine) for C11
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Contributors5
Uh oh!
There was an error while loading.Please reload this page.