The recent introduction of multicore architectures has caused a surprising amount of uproar. Multiprocessing has been around for decades. The original CDC 6000, for instance, was an interestingly designed multiprocessor machine first put into use in the early 1960s.
Another important player in multiprocessing is Ada. Even the original Ada 83 version of the language has a well-developed notion of multithreading (termed “tasking” in Ada) with high-level constructs that are easy to use and analyze. The subsequent Ada 95 and Ada 2005 versions of the language substantially improved and extended this functionality, and decades of experience have been accumulated in using Ada to deal with the problem of writing programs that run effectively on machines using more than one processor.