This course will be concerned with various aspects of the theory underlying parallel architectures and concurrent programming. The following is a tentative list of topics: formalisms for expressing concurrency including flow expressions, path expressions, Petri nets; relative power of synchronization primitives; critical section solutions; the database consistency problem; language features for concurrent programming; e.g. monitors; proving the correctness of concurrent programs; mapping concurrent programs onto parallel architectures.