Distributed processing has a strong theoretical foundation, but many day-to-day practitioners make limited use of the advantages this theory can give them. The result includes unreliable systems with obscure and intermittent failures, that can cost time, money and in extreme cases, lives. Reliable construction of distributed and concurrent systems must incorporate theory in practice. This book provides a concise presentation of the theory closely linked to the practical realisation of these concepts. Practical presentation is given with examples from C, Java and Eiffel in this comprehensive textbook which contains all the elements needed for a complete development of a distributed system. Theoretical models of concurrency are linked with practical realisation of systems, providing an integrated approach to the field. Written with undergraduates in mind, especially relevant for intermediate level students, this textbook will prove a comprehensive guide to the topic. Example code will be provided on a website.