The Art of Multiprocessor Programming