libmill
CspChan
libmill | CspChan | |
---|---|---|
2 | 4 | |
2,701 | 419 | |
- | - | |
0.0 | 5.9 | |
about 3 years 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.
libmill
-
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?
-
libmill - Go-style concurrency in C
https://github.com/sustrik/libmill/blob/e8937e624757663f5379...
They wrote a macro (or in this case a set of macros) to transform that into valid C code.
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?
libdill - Structured concurrency in C
go - The Go programming language
moodycamel - A fast multi-producer, multi-consumer lock-free concurrent queue for C++11
plan9 - Plan 9 History, from 1992-09-21 to 2015-01-10.
A C++14 library for executors - C++ library for executors
RaftLib - The RaftLib C++ library, streaming/dataflow concurrency via C++ iostream-like operators
plan9port - Plan 9 from User Space
SObjectizer - SObjectizer: it's all about in-process message dispatching!
specification - The Oberon+ Programming Language Specification
CUB - THIS REPOSITORY HAS MOVED TO github.com/nvidia/cub, WHICH IS AUTOMATICALLY MIRRORED HERE.
MPMCQueue.h - A bounded multi-producer multi-consumer concurrent queue written in C++11