2018
DOI: 10.1145/3296979.3192395
|View full text |Cite
|
Sign up to set email alerts
|

Symbolic reasoning for automatic signal placement

Abstract: Explicit signaling between threads is a perennial cause of bugs in concurrent programs. While there are several runtime techniques to automatically notify threads upon the availability of some shared resource, such techniques are not widely-adopted due to their run-time overhead. This paper proposes a new solution based on static analysis for automatically generating a performant explicit-signal program from its corresponding implicit-signal implementation.The key idea is to generate verification conditions th… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
1
1
1

Citation Types

0
3
0

Year Published

2018
2018
2020
2020

Publication Types

Select...
2
1

Relationship

1
2

Authors

Journals

citations
Cited by 3 publications
(3 citation statements)
references
References 49 publications
0
3
0
Order By: Relevance
“…This kind of reasoning is necessary for Expresso to achieve the performance results from Figure 9 in all benchmarks. Furthermore, the inferred monitor invariants are often intricate-for instance, the "AsyncDispatch" invariant (shown in the extended version of the paper [21]) from the Gradle codebase has 22 sub-terms (12 equality/inequality comparisons and arithmetic operations and 10 logical connectives).…”
Section: Discussionmentioning
confidence: 99%
See 1 more Smart Citation
“…This kind of reasoning is necessary for Expresso to achieve the performance results from Figure 9 in all benchmarks. Furthermore, the inferred monitor invariants are often intricate-for instance, the "AsyncDispatch" invariant (shown in the extended version of the paper [21]) from the Gradle codebase has 22 sub-terms (12 equality/inequality comparisons and arithmetic operations and 10 logical connectives).…”
Section: Discussionmentioning
confidence: 99%
“…We say that a monitor trace is syntactically well-formed if it (a) respects the relative ordering of statements within a method, (b) obeys the requirement that a thread cannot execute method m ′ before finishing the execution of method m, and (c) satisfies the invariant that a thread exits the monitor either by blocking on a predicate or by finishing the execution of a method. A more formal definition of syntactic well-formedness is given in the extended version of the paper [21]. Figure 5.…”
Section: Source Languagementioning
confidence: 99%
“…One of the greatest challenges in software development is to write programs that are not only correct but also efficient with respect to memory usage, execution time, or domain specific resource metrics. For this reason, automatically optimizing program performance has long been a goal of synthesis, and several existing techniques tackle this problem for low-level straight-line code [9,48,49,55,56] or add efficient synchronization to concurrent programs [11,12,21,28]. However, the developed techniques are not applicable to recent advances in the synthesis of high-level looping or recursive programs manipulating custom data structures [22,35,39,46,50,51].…”
Section: Introductionmentioning
confidence: 99%