DEKKER'S SOLUTION

En ustaca yapılmış parçalara ayırma çözümlerinin bulunduğu sırada, test-kur operasyonlarıyada atomic ex-change�lerin yer almadığı çoklu işlemcilerin ortak ihracı problemi yıllarca süren çalışmalara konu olmuştur.Dekker�ın çözümü en eski olandır. Dekker�ın çözümünde her ağ ve her kilit üç farklı şekilde sunulmuştur.

State[0..1]�process i sets state[i] to enter section

Turn �indicates who�s turn it is try next

Buna göre başlangıçta her değişken sıfır olduğundan her kilitleme ve kilit çözümü işlemleri için,her işlemin kendi işlem ID�sini geçtiği var sayılırsa Dekker�ın kilitleme ve kilit çözüm operasyon kodları aşağıda ki gibidir.

other(pid)
return( 1 - pid );
lock(pid):
state[pid] = 1;
while state[other(pid)] = 1 do state[pid] = 0;
while turn <> pid do nothing;
state[pid] = 1;
end loop;
return;
unlock(pid):
state[pid] = 0;
turn = other(pid);
return;

A kritik bölümde olduğunda state (A) bir state (B) sıfırdır. Eğer ikiside aynı anda girmeye çalışırsa her iki state�de bir olarak kurulur,her ikisi de bağlanır ve biri diğerinin kendisini sıfırlamasını bekler.Biri bloke olmuş ve kendi sırasını bekliyorken diğeri hemen kendini ileri sürer.Bununla birlikte kritik bölümden çıkarken her işlem diğer bir işleme öncelik tanır,diğerlerinin kritik bölümü kendine saklamasını engeller.

Bu kodu,anlamak zordur.Dahası,iki işlemden fazlasını genellemekte zordur.Bu problemin çözümü için başka bir çok yol daha vardır.Bir çok modern RISC işlemcisi test-kur tanımlamalarına sahip olmamasına rağmen yukarıda olduğu gibi illaki kod kullanımını şart koşmuyor. Örneğin;DEC Alpha işlemcisi kullanıcıya öyle olmadığı halde atomic görünen tanımlama zinciri yaratmasına izin vermektedir.Kilitli yada inter-locked tanımlama ile başlayıp aynı adrese işaret eden store-interlocked tanımlamalarıyla biten anahtar,kritik bölümü işletemez ve başka bir şey de yapamaz, sadece hata raporu verir. Bunu yapmak için CPU interlock�lanmış adresi içeren özel bir register içerir.Bu,load-interlocked tanımlamalarıyla kurulur ve eğer bu register başka bir işlemci tarafından aynı yerde bir depo tespit ederse,aşağıdaki store-interlocked tanımlamaları oluşur, no-op olur ve hata durumu oluşur.

Dolayısı ile;bir DEC Alpha�da bir atomic artış operasyonu şuna benzer:

repeat
load interlocked X into register R
increment register R
store interlocked register R into X
until store is successful