Брюховецкая
- 1 year ago
- 0
- 0
Линеаризу́емость ( англ. linearizability ) — свойство программной системы, при котором результат любого параллельного выполнения (операций) эквивалентен некоторому последовательному выполнению. Для любого другого потока выполнение линеаризуемой операции является мгновенным: операция либо не начата, либо завершена. Применяется как в многопоточном программировании, так и в распределённых системах.
Как было показано , линеаризуемость является локальным и неблокируемым свойством. Локальность означает, что если доказана линеаризуемость операций для нескольких программ в отдельности (или для операций работающих с разными объектами одной программы), то программы вместе (операции вместе) также будут линеаризуемы. В линеаризуемой программе запущенные операции не требуют для своего завершения запуска других операций. Это свойство неблокируемости. Кроме того, линеаризуемость упрощает доказательство свойств программ, которые используют линеаризуемые операции, так как поведение линеаризуемой программы сводится к последовательным выполнениям.
Свойство линеаризуемости во многом сходно с такими свойствами как ( англ. serializability ), атомарность , последовательная согласованность ( англ. sequential consistency ). В отличие от них, линеаризуемость предполагает наличие спецификации, тогда как эти свойства накладывают ограничения только на саму программу. В некоторых источниках термин атомарность используется как синоним линеаризуемости, в других же означает .
Часто под неформальным понятием потоковой безопасности ( англ. thread-safety ) понимают именно линеаризуемость.
Понятие линеаризуемости впервые появилось в статье Херлихи и 1987 года как для систем с объектной организацией общей памяти . В отличие от всех остальных систем, здесь программы не могут напрямую использовать общие переменные, а только через специальные функции-методы (операции). Для этих систем линеаризуемость совпадает со .
Задача проверки линеаризуемости — это частный случай задачи функционального тестирования , в которой проверяется, удовлетворяет ли программа функциональным требованиям к ней, заданным в виде спецификации. Но в отличие от общего случая, здесь спецификация требуется только для последовательных выполнений.