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-base
ortexlive-core
. The same package should also provide thelatexmk
script. (See below) -
Install pygments, a Python syntax highlighter. This is used by the LaTeX package minted to handle our syntax highlighting.
-
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
.tex
file. (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
Note that
latexmk
will run LuaLaTeX multiple times, since TeX generates cross references in one pass, then links them in a second.If you can't use
latexmk
for some reason, you can manually invokelualatex -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.