Libcsp: a fast C concurrency library influenced by the CSP model
github.com
github.com
It's more correct to say that it doesn't come with that support out of the box, but it certainly does allow for it and nudges you towards a specific direction (no shared mutable state).
My use case is certainly not the common one though, so others may have different experiences.
1. As you suggest, there's no equivalent to the `select` mechanism. To perform the equivalent, you must busy loop and call `csp_chan_try_pop`.
2. It appears you cannot nest coroutines.
3. The mutex implementation does not provide an RWMutex.
4. `csp_yield` seems somewhat necessary for practical applications.
Normally I would not use another language as a basis for comparison to a C library, but that's precisely what the author of Libcsp appears to be aiming for.
All that said, there's a really slick implementation of a lock free RB queue backing this library, and It's a neat project. I think it would stand on its own better than as a "go style in C" library.
[0] https://github.com/shiyanhui/libcsp/blob/48782baf0e63cbf2914...
> communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems
The Libcsp project says it’s influenced by CSP. Does libcsp stick to this formal language?
1 - https://en.wikipedia.org/wiki/Communicating_sequential_proce...
I've had a very short introduction to pthreads in a CS class, but it was too succinct to get any practical benefit IMO. Knowing that a mutex can be used to limit access to a shared variable is easy enough to understand. How to structure software that runs concurrent tasks is still a mystery to me. Code I've written that uses threads appears to work but I'm not confident I haven't introduced a deadlock in there that's just waiting the worst possible timing to trigger. For instance, the pthreads manpage does a good job at listing the available functions. I have no idea when they should be used though.
If anyone can point me to learning resources around concurrency (books, presentations, talks, sample open source software that does good use of concurrency patterns, ... anything goes, really) I will be eternally grateful.
https://pragprog.com/book/pb7con/seven-concurrency-models-in...
Also because I have it, here’s a distributed systems meta-reading-list. It’s old and thus I’m sure there are some broken links, but it’s a deep rabbit hole if you’re interested in distributed systems, which is basically concurrency on steroids.
I would recommend FreeRTOS instead, as it has proper prempetive scheduling, context switching and wide debugger support. It's actually only 4 files[2] so not very heavyweight in either memory or stuff to learn, and has decent abstractions for cross thread communication (queues etc). Then you can write continuous code and use preemption, rather than have to code everything as a state machine and co-operatively schedule, which is painful sometimes.
[1] http://dunkels.com/adam/pt/
[2] https://www.freertos.org/Creating-a-new-FreeRTOS-project.htm...