Readings "Passive" learning opportunities

This page collects together all of the “readings” associated with individual modules.

In this site, readings represent “passive” learning opportunities, as opposed to experiences, which represent “active” learning opportunities. In many courses, readings and experiences together constitute the “assignments”.

Module: Getting Started

Guided tour of Morea course websites

About Morea

Getting Started

Course introduction, logistics, administrivia

Syllabus

The Linux command-line

A set of pointers to material about the Linux command-line

Module: Concurrency, Processes, Threads

Concurrency

Introduction to the concept of concurency

Processes and Threads

The process and thread abstractions, and how they can or cannot be used to achieve useful concurrency

Module: Java Threads

Java Threads

Basics of using Java Threads

[SCREENCAST] Java Threads

Screencast of the Java Threads lecture notes

JavaFX

Basics of using JavaFX

Java Threads Cancellations

How to terminate threads in Java

Java's volatile Keyword

Usefulness and use of Java’s volatile keyword

Sample Java source

Module: Thread Safety

Thread Safety

Introduction to the race condition and thread safety concepts

Sample Java source

Module: Locks

Locks: Principle

How to use locks to achieve thread safety

Locks: Implementation

How locks are implemented in practice

Locks in Java

How Java provides the lock abstraction

Module: Condition Variables

Condition Variables

Introduction to condition variables and how they are used for threads to synchronize

Condition Variables in Java

How Java provides the condition variables abstraction

Sample Java source

Module: Semaphores

Semaphores

Introduction to the semaphore concept and how it can be used as an alternative to locks and condition variables

Sample Java source

Module: Classic Concurrency Problems

Classic Problems

A description of several classic concurrency problems and their solutions

Module: The Java Concurrency Package

java.util.concurrent

Overview of the java.util.concurrent package

Module: Midterm

Midterm Review

Module: No Locks?

Lockfree Programming

Introduction to thread-safe programming without using locks!

Transactional Memory

Introduction to the concept of transaction memory

The Silently Shifting Semicolon

Interesting research article on performance and correctness

Module: Data Parallelism

Data Parallelism

An introduction to the concept of data parallelism on multi-core platforms

Sample C source

Module: Multi-Threading in C/C++

Threads in C with OpenMP

An introduction to OpenMP

Sample C source

Module: Threads In Other Languages

Threads in Other Languages

A brief overview of threads in other languages

Sample source

Module: Programming for Performance

Measuring Performance

How to measure/characterize the performance of a program on a platform

Code Optimization

Main concepts and techniques for optimizing code, many of which are done for you by compilers

Programming for Locality

How to write code that promotes data reuse in the cache

Sample C source