Content deleted Content added
→{{anchor|Concurrent programming languages|Languages supporting concurrent programming}}Languages supporting concurrent programming: Rephrased to put less emphasis. Some of these languages (namely, C++) simply support concurrency, but it doesn't play an important role. |
merge in section on consistency models from Parallel computing. The Lamport source is tagged concurrency and doesn't even use the word parallel in the text |
||
Line 60:
==Models==
Introduced in 1962, [[Petri net]]s were an early attempt to codify the rules of concurrent execution. Dataflow theory later built upon these, and [[Dataflow architecture]]s were created to physically implement the ideas of dataflow theory. Beginning in the late 1970s, [[process calculi]] such as [[Calculus of Communicating Systems]] (CCS) and [[Communicating Sequential Processes]] (CSP) were developed to permit algebraic reasoning about systems composed of interacting components. The [[pi calculus|π-calculus]] added the capability for reasoning about dynamic topologies.
Logics such as Lamport's [[Temporal logic of actions|TLA+]], and mathematical models such as [[Trace theory|traces]] and [[Actor model theory|Actor event diagrams]], have also been developed to describe the behavior of concurrent systems.
[[Software transactional memory]] borrows from [[Database management system|database theory]] the concept of [[Atomic commit|atomic transactions]] and applies them to memory accesses.
===Consistency models===
{{main|Consistency model}}
Concurrent programming languages and multiprocessor programs must have a [[consistency model]] (also known as a memory model). The consistency model defines rules for how operations on [[Computer data storage|computer memory]] occur and how results are produced.
One of the first consistency models was [[Leslie Lamport]]'s [[sequential consistency]] model. Sequential consistency is the property of a program that its execution produces the same results as a sequential program. Specifically, a program is sequentially consistent if "the results of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program".<ref>{{cite journal|last=Lamport|first=Leslie|title=How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs|journal=IEEE Transactions on Computers|date=1 September 1979|volume=C-28|issue=9|pages=690–691|doi=10.1109/TC.1979.1675439|s2cid=5679366}}</ref>
{{see also|Relaxed sequential}}
==Implementation==
|