|
ABSTRACT
A method is presented for programming correct and efficient cooperation in a set of sequential modules, on the basis of an invariant assertion, by means of formal and static deductions. For each sequential module, the pre- and post-assertions are computed from the invariant. Whereas the pre-assertion gives the synchronizing condition required before execution in order to preserve the invariant, the post-assertion expresses the “contribution” of this execution. Other assertions, called firing conditions, are derived which connect that contribution to the needs of waiting processes as expressed in their synchronizing conditions. A sequential module and its synchronizing and firing conditions are then integrated in a high-level synchronizing construct close to conditional critical regions, but allowing explicit control over the synchronizing conditions to be reevaluated at the exit for process resumption. Three levels of static elimination of useless condition reevaluations are then presented. These eliminations essentially use the information contained in firing conditions; they are shown to preserve partial correctness. The combined use of the notation and of the techniques proposed is illustrated through three examples.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
Brinch Hansen P. 1972. A comparison of two synchronizing concepts. Acta Informatica 1, 3 (1972), 190-199.
|
 |
2
|
|
| |
3
|
|
| |
4
|
Burstall R. 1974. Program proving as hand simulation with a little induction, Proc. IFIP Congress 74, North-Holland, 1974, 308-312.
|
| |
5
|
|
| |
6
|
Cooprider L. W., P. J. Courtois, F. Heymans and D. L. Parnas 1974. Information streams sharing a finite buffer: other solutions, Information Processing Letters 3 (1974), 16-21.
|
 |
7
|
|
| |
8
|
Dijkstra E. W. 1968b. A constructive approach to the problem of program correctness, BIT 8 (1968), 174-186.
|
| |
9
|
Dijkstra E. W. 1968c. Cooperating sequential processes, in F. Genuys (ed.), Programming Languages, Academic Press, New York, 1968.
|
| |
10
|
Dijkstra E. W. 1972. Information streams sharing a finite buffer, Information Processing Letters 1 (1972), 179-180.
|
| |
11
|
Dijkstra E. W. 1974a. A simple axiomatic basis for programming language constructs, Indagationes Mathematicae 36 (1974), 1-15.
|
| |
12
|
Dijkstra E. W. 1974b. Guarded commands, non-determinacy and a calculus for the derivation of programs, Rep. EWD418, Burroughs, The Netherlands, 1974.
|
| |
13
|
Floyd R. W. 1967. Assigning meanings to programs, in J. T. Schwartz (ed.), Mathematical Aspects of computer science, Proc. Symp. Applied Maths, vol. 19, American Math. Soc., Providence, 1967.
|
| |
14
|
|
 |
15
|
|
 |
16
|
|
| |
17
|
Hoare C. A. R. 1973a. Towards a theory of parallel programming, in C. A. R. Hoare and R. H. Perrott (eds), Operating Systems Techniques, Academic Press, New York, 1973.
|
| |
18
|
Hoare C. A. R. 1973b. Recursive data structures, CS-73-400, Computer Sci. Dept., Stanford Univ., 1973.
|
 |
19
|
|
| |
20
|
|
| |
21
|
|
 |
22
|
|
| |
23
|
Levitt K. N. 1972. The application of program proving techniques to the verification of synchronization processes, AFIPS Proc. FJCC, vol.41, 1972, 33-47.
|
 |
24
|
|
|