Admittedly, the examples in the preceding sections got a little convoluted. There's a reason to that madness, I promise, but before we move on I'd like to show you some working examples from the charming The Little Book of Semaphores. This book, in case you skipped previous bibliographic notes, is a collection of concurrency puzzles suitable for self-learning, on account of the puzzles being amusing and coming with good hints. As the title implies, the book does make use of the semaphore primitive, which Rust does not have. Though, as mentioned in the previous chapter, we will build a semaphore in the next chapter.
This puzzle does not actually appear in The Little Book of Semaphores but it is based on one of the puzzles there - the cigarette smoker's problem from section 4.5. Personally, I think cigarettes are gross so we're going to reword things a touch. The idea is the same.
We have four threads in total. One thread...