Программный подход может быть реализован для параллельных процессов, которые выполняются как в однопроцессорной, так и в многопроцессорной системе с разделяемой основной памятью. Обычно такие подходы предполагают элементарные взаимоисключения на уровне доступа к памяти ([LAMP91], см. также задачу 5.10) — т.е. одновременный доступ (чтение и/или запись) к одной и той же ячейке основной памяти упорядочивается при помощи некоторого механизма (при этом порядок предоставления доступа не определяется порядком обращения процессов за доступом к памяти). Никакой иной поддержки со стороны аппаратного обеспечения, операционной системы или языка программирования не предполагается.