The continuation-based paradigm means that no potentially blocking thread call will return to the caller. Instead, such calls take a continuation, which is a function and parameter, as arguments. When a potentially blocking call unblocks, the continuation is invoked. While this is a little weird, it means that threads do not need to have their own stacks, as they do in standard thread libraries like pthreads. As such, each thread only consumes a few bytes of memory, allowing you to have millions of threads without running out of memory as you do when threads have their own stacks. This is very nice.
A downside of having a non-preemptive thread system is that you cannot assign threads to blocking system calls as you can with pthreads, and have threads run while the system call blocks. If you do, the entire process blocks. Regardless, I have found that cbthreads are exceptionally useful for many programming tasks.
The cbthread library is composed of one source file (cbthread.c) and one header file (cbthread.h). You will also need to compile with the Libfdr library, available at: http://web.eecs.utk.edu/~jplank/plank/classes/cs360/360/notes/Libfdr/.
The third lecture is not required to use the library -- it is just there to understand the implementation.