A widening approach to multithreaded program verification

Pthread-style multithreaded programs feature rich thread communication mechanisms, such as shared variables, signals, and broadcasts. In this article, we consider the automated verification of such programs where an unknown number of threads execute a given finite-data procedure in parallel. Such pr...

Full description

Bibliographic Details
Main Authors: Kaiser, A, Kroening, D, Wahl, T
Format: Journal article
Published: Association for Computing Machinery 2014
_version_ 1797102424330076160
author Kaiser, A
Kroening, D
Wahl, T
author_facet Kaiser, A
Kroening, D
Wahl, T
author_sort Kaiser, A
collection OXFORD
description Pthread-style multithreaded programs feature rich thread communication mechanisms, such as shared variables, signals, and broadcasts. In this article, we consider the automated verification of such programs where an unknown number of threads execute a given finite-data procedure in parallel. Such procedures are typically obtained as predicate abstractions of recursion-free source code written in C or Java. Many safety problems over finite-data replicated multithreaded programs are decidable via a reduction to the coverability problem in certain types of well-ordered infinite-state transition systems. On the other hand, in full generality, this problem is Ackermann-hard, which seems to rule out efficient algorithmic treatment. We present a novel, sound, and complete yet empirically efficient solution. Our approach is to judiciously widen the original set of coverability targets by configurations that involve fewer threads and are thus easier to decide, and whose exploration may well be sufficient: if they turn out uncoverable, so are the original targets. To soften the impact of "bad guesses" - configurations that turn out coverable - the exploration is accompanied by a parallel engine that generates coverable configurations; none of these is ever selected for widening. Its job being merely to prevent bad widening choices, such an engine need not be complete for coverability analysis, which enables a range of existing partial (e.g., nonterminating) techniques.We present extensive experiments on multithreaded C programs, including device driver code from FreeBSD, Solaris, and Linux distributions. Our approach outperforms existing coverability methods by orders of magnitude.
first_indexed 2024-03-07T06:05:50Z
format Journal article
id oxford-uuid:edcccbbd-b8fe-46d7-b9a1-cf4e68266190
institution University of Oxford
last_indexed 2024-03-07T06:05:50Z
publishDate 2014
publisher Association for Computing Machinery
record_format dspace
spelling oxford-uuid:edcccbbd-b8fe-46d7-b9a1-cf4e682661902022-03-27T11:27:52ZA widening approach to multithreaded program verificationJournal articlehttp://purl.org/coar/resource_type/c_dcae04bcuuid:edcccbbd-b8fe-46d7-b9a1-cf4e68266190Symplectic Elements at OxfordAssociation for Computing Machinery2014Kaiser, AKroening, DWahl, TPthread-style multithreaded programs feature rich thread communication mechanisms, such as shared variables, signals, and broadcasts. In this article, we consider the automated verification of such programs where an unknown number of threads execute a given finite-data procedure in parallel. Such procedures are typically obtained as predicate abstractions of recursion-free source code written in C or Java. Many safety problems over finite-data replicated multithreaded programs are decidable via a reduction to the coverability problem in certain types of well-ordered infinite-state transition systems. On the other hand, in full generality, this problem is Ackermann-hard, which seems to rule out efficient algorithmic treatment. We present a novel, sound, and complete yet empirically efficient solution. Our approach is to judiciously widen the original set of coverability targets by configurations that involve fewer threads and are thus easier to decide, and whose exploration may well be sufficient: if they turn out uncoverable, so are the original targets. To soften the impact of "bad guesses" - configurations that turn out coverable - the exploration is accompanied by a parallel engine that generates coverable configurations; none of these is ever selected for widening. Its job being merely to prevent bad widening choices, such an engine need not be complete for coverability analysis, which enables a range of existing partial (e.g., nonterminating) techniques.We present extensive experiments on multithreaded C programs, including device driver code from FreeBSD, Solaris, and Linux distributions. Our approach outperforms existing coverability methods by orders of magnitude.
spellingShingle Kaiser, A
Kroening, D
Wahl, T
A widening approach to multithreaded program verification
title A widening approach to multithreaded program verification
title_full A widening approach to multithreaded program verification
title_fullStr A widening approach to multithreaded program verification
title_full_unstemmed A widening approach to multithreaded program verification
title_short A widening approach to multithreaded program verification
title_sort widening approach to multithreaded program verification
work_keys_str_mv AT kaisera awideningapproachtomultithreadedprogramverification
AT kroeningd awideningapproachtomultithreadedprogramverification
AT wahlt awideningapproachtomultithreadedprogramverification
AT kaisera wideningapproachtomultithreadedprogramverification
AT kroeningd wideningapproachtomultithreadedprogramverification
AT wahlt wideningapproachtomultithreadedprogramverification