libdill
CspChan
libdill | CspChan | |
---|---|---|
2 | 4 | |
1,658 | 419 | |
- | - | |
0.0 | 5.9 | |
about 1 year ago | 5 months ago | |
C | C | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
libdill
-
Show HN: A pure C89 implementation of Go channels, with blocking selects
libmill (https://github.com/sustrik/libmill) and libdill (https://github.com/sustrik/libdill) should be similar and probably mentioned.
As far as I understand the differences between CspChan and libmill might be that libmill also implements lightweight tasks (coroutines) and everything that goes with it (IO multiplexing, async timers, etc), while CspChan uses OS threads?
-
Libdill: Structured Concurrency for C (2016)
I saw this in 2017. Unfortunately, not much activity now. https://github.com/sustrik/libdill/commits/master
Might be fun to play with, but I wouldn't rely on it. Generally, better off with libuv for existing projects or Rust for greener fields where lifetimes are checked and safe concurrency is much easier.
CspChan
-
Show HN: Towards Oberon+ concurrency; request for comments
I've updated the paper and removed the SELECT, CLOSE and CLOSED procedures as discussed.
I still think a close feature which - in contrast to Go - would just signal all waiting threads and abandon communication could be useful. I implemented this in the C library I use for experiments: https://github.com/rochus-keller/CspChan
> the proposal for it to take a timeout, which could then be detected via execution of ELSE?
It could still be added in future, e.g. as an additional parameter to SEND or RECEIVE, but in a similar way to CLOSE it makes things more complicated, and there is an alternative solution with a separate thread sending after a delay a over a channel which receives in a WITH statement where the candidate channel waits.
> have you considered asking Dr Wirth for feedback?
I have qualms about bothering him with this in his well-deserved retirement, especially as he has demonstrated with Oberon-07 in which direction he would develop the language (see also https://oberon-lang.github.io/2021/07/16/comparing-oberon+-w...).
- Show HN: A pure C89 implementation of Go channels, with blocking selects
- A pure C89 implementation of Go channels, including blocking and non-blocking selects
What are some alternatives?
libmill - Go-style concurrency in C
go - The Go programming language
ck - Concurrency primitives, safe memory reclamation mechanisms and non-blocking (including lock-free) data structures designed to aid in the research, design and implementation of high performance concurrent systems developed in C99+.
plan9 - Plan 9 History, from 1992-09-21 to 2015-01-10.
A C++14 library for executors - C++ library for executors
C++ Actor Framework - An Open Source Implementation of the Actor Model in C++
plan9port - Plan 9 from User Space
moodycamel - A fast multi-producer, multi-consumer lock-free concurrent queue for C++11
specification - The Oberon+ Programming Language Specification
Taskflow - A General-purpose Parallel and Heterogeneous Task Programming System
HPX - The C++ Standard Library for Parallelism and Concurrency