Анализируя утверждение "действия синхронизации полностью упорядочены":
- "действия синхронизации" - это набор
S
программных операций (действий) - у нас есть отношение
R
over set S
: это отношение «до и после». То есть данные программные операторы a
и b
, aRb
в том и только в том случае, если a
происходит до b
.
Тогда то, что говорится в утверждении, является "отношением R
равно всего по S ".
" отношение R
равно S
", что означает, что для каждых двух операций a,b
из набора S
(с a!=b
), либо aRb
, либо bRa
. То есть, либо a
происходит до b
, либо b
происходит до a
.
Если мы определим набор S
как набор всех захватов и разблокировок, выполненных для одного и того же объекта блокировки X
; тогда набор S
равен полностью , упорядоченный отношением «случай до»: пусть будет a
получение блокировки X
, выполненной потоком T1
, и b
получение блокировки, выполненной нить T2
. Затем происходит либо a
- до b
(в случае, если T1 сначала получает блокировку. T1 сначала нужно снять блокировку, затем T2 сможет ее получить); или b
происходит до a
(в случае, если T2 получает блокировку первым).
Примечание: не все отношения являются полными.
Например, отношение <=
Всего по действительным числам. То есть для каждой пары a,b
действительных чисел верно либо a<=b
, либо b<=a
. Общий порядок здесь означает, что, учитывая любые два элемента, мы всегда можем решить, что произойдет первым. данное отношение.
Но отношение P
: «является предком», не является полным отношением ко множеству всех людей. Конечно, для некоторых пар людей a,b
верно, что либо aPb
(a
является предком b
), либо bPa
(b
является предком a
). Но для большинства из них ни aPb
, ни bPa
не соответствуют действительности; то есть мы не можем использовать отношение, чтобы решить, какой элемент будет «первым» (в генеалогических терминах).
Возвращаясь к операторам программы, отношение «до и после» R
явно является частичным по сравнению с множеством из всех программных операторов (как в примере "предка"): заданные несинхронизированные действия a,b
(любые операции, выполняемые разными потоками, в отсутствие правильной синхронизации), ни aRb
, ни bRa
держит.