https://github.com/sysprog21/concurrent-programs
Complementary Concurrency Programs for course "Linux Kernel Internals"
https://github.com/sysprog21/concurrent-programs
concurrency concurrency-patterns linux multithreading posix-threads
Last synced: 6 months ago
JSON representation
Complementary Concurrency Programs for course "Linux Kernel Internals"
- Host: GitHub
- URL: https://github.com/sysprog21/concurrent-programs
- Owner: sysprog21
- License: bsd-2-clause
- Created: 2021-04-06T11:39:59.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2025-04-26T12:26:47.000Z (7 months ago)
- Last Synced: 2025-05-16T05:04:09.167Z (6 months ago)
- Topics: concurrency, concurrency-patterns, linux, multithreading, posix-threads
- Language: C
- Homepage:
- Size: 241 KB
- Stars: 391
- Watchers: 24
- Forks: 87
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Complementary Programs for course "Linux Kernel Internals"
This distribution is a collection of programs that are generally unrelated,
except in that they all deal with the concurrent programming. The main
purpose of these programs is to be illustrative and educational.
## Project Listing
* [Coroutine](https://en.wikipedia.org/wiki/Coroutine)
- [coro](coro/): A coroutine implementation with setjmp/longjmp.
- [tinync](tinync/): A tiny `nc` implementation using coroutine.
- [fiber](fiber/): A user-level thread (fiber) using `clone` system call.
- [preempt\_sched](preempt_sched/): A preemptive userspace multitasking based on a SIGALRM signal.
* Multi-threading Paradigms
- [tpool](tpool/): A lightweight thread pool.
- [refcnt](refcnt/): A generic reference counting.
- [work-steal](work-steal/): A work-stealing scheduler.
- [mutex](mutex/): A low-memory-footprint mutex.
* [Producer–consumer problem](https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem)
- [spmc](spmc/): A concurrent single-producer/multiple-consumer queue.
- [mpsc](mpsc/): An unbounded lockless single-consumer/multiple-producer FIFO queue.
- [mpmc](mpmc/): A multiple-producer/multiple-consumer (MPMC) queue using Linux futex.
- [lf-queue](lf-queue/): A bounded lock-free queue.
- [channel](channel/): A Linux futex based Go channel implementation.
- [broadcast](broadcast/): A lock-free MPMC broadcast pub-sub queue.
* [Lock-Free](https://en.wikipedia.org/wiki/Non-blocking_algorithm) Data Structure
- [ringbuffer](ringbuffer/): A lock-less ring buffer.
- [lfring](lfring/): A lock-free multiple-producer/multiple-consumer (MPMC) ring buffer.
- [ringbuf\_shm](ringbuf-shm/): An optimized lock-free ring buffer with shared memory.
- [mbus](mbus/): A concurrent message bus.
- [hashmap](hashmap/): A concurrent hashmap implementation.
- [lf-timer](lf-timer/): A lock-free timer.
* [Synchronization](https://en.wikipedia.org/wiki/Synchronization_(computer_science))
- [mcslock](mcslock/): An MCS lock implementation.
- [seqlock](seqlock/): A seqlock (sequence lock) implementation.
- [hp\_list](hp_list/)/: A concurrent linked list utilizing Hazard Pointers.
- [rcu-list](rcu-list/): A concurrent linked list utilizing the simplified RCU algorithm.
- [qsbr](qsbr/): An implementation of Quiescent state based reclamation (QSBR).
- [list-move](list-move/): Evaluation of two concurrent linked lists: QSBR and lock-based.
- [rcu\_queue](rcu_queue/): An efficient concurrent queue based on QSBR.
- [thread-rcu](thread-rcu/): A Linux Kernel style thread-based simple RCU.
- [cmap](cmap/): A concurrent map implementation based on RCU.
* Applications
- [httpd](httpd/): A multi-threaded web server.
- [map-reduce](map-reduce/): word counting using MapReduce.
- [redirect](redirect/): An I/O multiplexer to monitor stdin redirect using `timerfd` and `epoll`.
- [picosh](picosh/): A minimalist UNIX shell.
## License
The above projects are released under the BSD 2 clause license.
Use of this source code is governed by a BSD-style license that can be found
in the LICENSE file.