📑 Table of Contents

Szymański's Mutual Exclusion Algorithm is a mutual exclusion algorithm devised by computer scientist Dr. Bolesław Szymański, which has many favorable properties including linear wait,[1][2] and which extension[3] solved the open problem posted by Leslie Lamport[4] whether there is an algorithm with a constant number of communication bits per process that satisfies every reasonable fairness and failure-tolerance requirement that Lamport conceived of (Lamport's solution used n factorial communication variables vs. Szymański's 5).

The algorithm

edit

The algorithm is modeled on a waiting room with an entry and exit doorway.[1] Initially the entry door is open and the exit door is closed. All processes which request entry into the critical section at roughly the same time enter the waiting room; the last of them closes the entry door and opens the exit door. The processes then enter the critical section one by one (or in larger groups if the critical section permits this). The last process to leave the critical section closes the exit door and reopens the entry door, so the next batch of processes may enter.

The implementation consists of each process having a flag variable which is written by that process and read by all others (this single-writer property is desirable for efficient cache usage).

Scheme of Process States During Execution

The flag variable assumes one of the following five values/states:

  • 0 denoting that the process is in the noncritical section.
  • 1 indicating that the process wants to enter its critical section (declaration of intention).
  • 2 showing that the process waits for other processes to get through the door_in.
  • 3 denoting that the process has just entered the waiting room.
  • 4 indicating that the process has crossed the door_out and entered the critical section.

The status of the entry door is computed by reading the flags of all N processes. Pseudo-code is given below:

# Entry protocol
flag[self]  1                        # Standing outside waiting room
await(all flag[1..N]  {0, 1, 2})     # Wait for open door
flag[self]  3                        # Standing in doorway
if any flag[1..N] = 1:                # Another process is waiting to enter
    flag[self]  2                    # Waiting for other processes to enter
    await(any flag[1..N] = 4)         # Wait for a process to enter and close the door

flag[self]  4                        # The door is closed
await(all flag[1..self-1]  {0, 1})   # Wait for everyone of lower ID to finish exit protocol

# Critical section
# ...

# Exit protocol
await(all flag[self+1..N]  {0, 1, 4}) # Ensure everyone in the waiting room has
                                       # realized that the door is supposed to be closed
flag[self]  0 # Leave. Reopen door if nobody is still in the waiting room

Note that the order of the "all" and "any" tests must be uniform. Despite the intuitive explanation, the algorithm was not easy to prove correct, however due to its favorable properties a proof of correctness was desirable and multiple proofs have been presented.[2][5]

References

edit
  1. ^ a b Szymański, Bolesław K. (1988). "A simple solution to Lamport's concurrent programming problem with linear wait". Proceedings of the 2nd international conference on Supercomputing - ICS '88. St. Malo, France: ACM. pp. 621–626. doi:10.1145/55364.55425. ISBN 978-0-89791-272-3. S2CID 18612278.
  2. ^ a b Manna, Zohar; Pnueli, Amir (1990). "An Exercise in Verification of Multi-Process Programs.". Beauty is Our Business: A Birthday Salute to Edsger W. Dijkstra. Springer Verlag. pp. 289–301. ISBN 978-0-387-97299-2.
  3. ^ Szymański, Bolesław (1990). "Mutual Exclusion Revisited" (PDF). Fifth Jerusalem Conference on Information Technology. Jerusalem, Israel: 110–117.
  4. ^ Lamport, Leslie (1986). "The Mutual Exclusion Problem - Part II: Statement and Solutions". Journal of the ACM. 33 (2): 327–348. CiteSeerX 10.1.1.32.9808. doi:10.1145/5383.5385. S2CID 7387839.
  5. ^ de Roever, Willem-Paul; de Boer, Frank; Hannemann, Ulrich; Hooman, Jozef; Lakhnech, Yassine; Poel, Mannes; Zwiers, Job (November 2001). Concurrency Verification. Number 54 in Cambridge Tracts in Theoretical Computer Science. Cambridge University Press. ISBN 978-0-521-80608-4.

See also

edit

📚 Artikel Terkait di Wikipedia

Hunt–Szymanski algorithm

In computer science, the Hunt–Szymanski algorithm, also known as Hunt–McIlroy algorithm, is a solution to the longest common subsequence problem. It was

Peterson's algorithm

Peterson's algorithm (or Peterson's solution) is a concurrent programming algorithm for mutual exclusion that allows two or more processes to share a single-use

Levenshtein distance

warping Euclidean distance Homology of sequences in genetics Hunt–Szymanski algorithm Jaccard index Jaro–Winkler distance Locality-sensitive hashing Lucene

Dekker's algorithm

relaxed ordering. Eisenberg & McGuire algorithm Peterson's algorithm Lamport's bakery algorithm Szymański's algorithm Semaphores Dijkstra, Edsger W. Over

Lamport's bakery algorithm

Lamport's bakery algorithm is a computer algorithm devised by computer scientist Leslie Lamport, as part of his long study of the formal correctness of

Diff

developed an initial prototype of diff. The algorithm this paper described became known as the Hunt–Szymanski algorithm. McIlroy's work was preceded and influenced

Lempel–Ziv–Storer–Szymanski

Lempel–Ziv–Storer–Szymanski (LZSS) is a lossless data compression algorithm, a derivative of LZ77, that was created in 1982 by James A. Storer and Thomas Szymanski. LZSS

Longest common subsequence

machine. Several algorithms exist that run faster than the presented dynamic programming approach. One of them is Hunt–Szymanski algorithm, which typically