What every systems programmer should know about concurrency
This repo contains the LaTeX source for a pretentiously-named, but hopefully concise, introduction to low-level concurrency.
Where do I get a copy?
The latest version should always be available at http://assets.bitbashing.io/papers/concurrency-primer.pdf. You can also find a rendered PDF for each tag with its release notes on Github and Gitlab.
How do I build it?
Install a modern, Unicode-aware LaTeX, such as LuaLaTeX. On Linux, this is usually as simple as installing your distro's TeX Live package, e.g.,
texlive-core. The same package should also provide the
latexmkscript. (See below)
Change the fonts as-needed.
The official version is typeset with Matthew Butterick's Equity, Christian Schwartz's Neue Haas Grotesk, and mononoki by Matthias Tellen. In the likely case that you don't have all of these on your system, you'll need to change the fontspec declarations near the top of the
.texfile. (You might want to tweak or remove the colophon while you're at it.) You can also change the body font size by changing
\documentclass[fontsize=10pt, ...to whatever you prefer.
Build the document using
latexmk -lualatex -latexoption=-halt-on-error -latexoption=-shell-escape concurrency-primer.tex
latexmkwill run LuaLaTeX multiple times, since TeX generates cross references in one pass, then links them in a second.
If you can't use
latexmkfor some reason, you can manually invoke
lualatex -halt-on-error -shell-escape concurrency-primer.tex
until it no longer warns, "Label(s) may have changed. Rerun to get cross-references right."
Enjoy a beautifully typeset concurrency-primer.pdf.