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.
- Coroutine
- coro: A coroutine implementation with setjmp/longjmp.
- tinync: A tiny
nc
implementation using coroutine. - fiber: A user-level thread (fiber) using
clone
system call. - preempt_sched: A preemptive userspace multitasking based on a SIGALRM signal.
- Multi-threading Paradigms
- tpool: A lightweight thread pool.
- refcnt: A generic reference counting.
- work-steal: A work-stealing scheduler.
- mutex: A low-memory-footprint mutex.
- Producer–consumer problem
- spmc: A concurrent single-producer/multiple-consumer queue.
- mpsc: An unbounded lockless single-consumer/multiple-producer FIFO queue.
- mpmc: A multiple-producer/multiple-consumer (MPMC) queue using Linux futex.
- lf-queue: A bounded lock-free queue.
- channel: A Linux futex based Go channel implementation.
- broadcast: A lock-free MPMC broadcast pub-sub queue.
- Lock-Free Data Structure
- ringbuffer: A lock-less ring buffer.
- lfring: A lock-free multiple-producer/multiple-consumer (MPMC) ring buffer.
- ringbuf_shm: An optimized lock-free ring buffer with shared memory.
- mbus: A concurrent message bus.
- hashmap: A concurrent hashmap implementation.
- lf-timer: A lock-free timer.
- Synchronization
- mcslock: An MCS lock implementation.
- seqlock: A seqlock (sequence lock) implementation.
- hp_list/: A concurrent linked list utilizing Hazard Pointers.
- rcu-list: A concurrent linked list utilizing the simplified RCU algorithm.
- qsbr: An implementation of Quiescent state based reclamation (QSBR).
- list-move: Evaluation of two concurrent linked lists: QSBR and lock-based.
- rcu_queue: An efficient concurrent queue based on QSBR.
- thread-rcu: A Linux Kernel style thread-based simple RCU.
- cmap: A concurrent map implementation based on RCU.
- Applications
- httpd: A multi-threaded web server.
- map-reduce: word counting using MapReduce.
- redirect: An I/O multiplexer to monitor stdin redirect using
timerfd
andepoll
. - picosh: A minimalist UNIX shell.
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.