ランポートのパン屋のアルゴリズム
注:スレッドはクリティカルセクションに入る前に自分自身も含めてチェックしているが、その場合の条件は常に false となるので、遅延は発生しない。
個々のスレッドは広域変数のうち自身に関わるものだけに書き込み、他のスレッドに対応する部分は読み込むだけである。注目すべき点は、これがコンペア・アンド・スワップなどの低レベルの「アトミック」な操作を前提としていない点である(訳注:一見して max() が心配になるが、上述されているように同じ番号を得る可能性を考慮したアルゴリズムなので max() がアトミックである必要は無い)。本来の証明では、同一メモリ位置へのリードとライトが同時に行われた場合、ライトだけが必ず正しい動作をすると仮定している。このときのリードは任意の数を返す。従って、同期プリミティブを持たないメモリ上でこのアルゴリズムを実装することが可能である。例えば2台のコンピュータで単純に共有されているSCSIディスクなどが考えられる。
変数 Enter の必要性は 7行~13行に「ロック」がないため明確ではないように思われるかもしれない。UCDAVIS: Bakery Algorithm にあるように、Enterが無いと複数のスレッドが同時にクリティカルセクションに入ってしまう可能性が出てくる。