Rico's Nerd Cluster

「离开世界之前 一切都是过程」

Bash Magic

Bash is great. Here is a list of bash tricks & knowledge points that I found magical

Data Structures Array Bash has 1D indexed array (the common array we normally see), and associative array. Any variable can be used as an array. To declare an array, use declare. Bash Array A...

Cpp Exceptions

Error Throwing

Error Throwing rethrow an error using std::rethrow_exception(std::exception_ptr) 1 2 3 4 5 6 7 8 9 10 11 12 catch (std::exception&) { exptr_ = std::current_exception(); } if (exptr_) { ...

C++ - [Concurrency 7] Thread Policies

Thread Policy Mental Model: each CPU repeatedly picks “the next runnable thread” to run. Different scheduling policies define different pick_next() rules. This is the core idea behind Linux’s nor...

C++ - [Concurrency 6] Memory Model

Introduction The C++ memory model was formally introduced in C++11 mainly for multithreading. Before C++11: Threading was platform-dependent. (POSIX threads for Unit systems) Behavior of sh...

C++ - [Concurrency 5] Coroutine

Coroutine Coroutines in C++ allows us to write asynchronous code in a sequential style. It allows us to resume and suspend, instead of blocking a thread. A coroutine by default is single-threaded,...

C++ - [Concurrency 4] Various Concurrent Methods

Asynchonous Programming, Vectorization, `std::launch`, Lockless array writes, OpenMP, SIMD, SSE2

Asynchronous Programming Single-Threaded Asynchornous Programming Cooperative Multitasking & Pre-emptive Multitasking This is a model where each task voluntari...

C++ - [Concurrency 3] Promise, Future, Packaged_Tasks

promise <> future; packaged_tasks

C++ - [Concurrency 2] Conditional Variables, Jthread

Conditional Variables, Jthread

Conditional Variables Vanilla Usage 1 2 3 4 5 std::unique_lock<std::mutex> lock(mutex_); cv_.wait(lock, pred); do_stuff_1(); do_stuff_2(); What actually happens std::unique_lock lock...

C++ - [Concurrency 10] Mutable Variables

Mutable Variable In this example, we are able to change a mutable variable in a const function 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <iostream> #include...

C++ - [Concurrency 9] Scoped Lock and `adopt_lock`

adopt_lock In a bank transfer system, if we transfer A->B and B->A concurrently. std::lock() locks two locks in a dead-lock free way, but does not unlock automatically, so we need to unlock ...