A co takhle zkusit vyrobit jiný typ zámku, který by byl spolehlivější. Zkusím dát návrh. V tomto návrhu mi jde o vzkazník, kde každý uživatel má vlastní složku a v ní několik souborů s příchozí a odchozí poštou apod.
Chci přečíst a zapsat data pro příchozí poštu.
Krok 1) Kontrolní krok - zatím vynechám popis
Krok 2)
Zjistím jaký je aktuální mikročas. Zjistím jaké je aktuální číslo, zajímají mě poslední dvě číslice. Např. 99
Do složky data/username/rq si vytvořím nový prázdný soubor 99.
Nastavím hodnotu posledního přístupu podle toho s jakým souborem chci pracovat (prostě číslo souboru označuje určitý soubor v osobní složce).
Pak nastavím časovač něco jako
usleep( rand(1,500) );
Dále zkontroluju jestli v té složce mezitím nevznikly další požadavky na práci se stejným souborem. Pokud ano, mám možnost tu situaci řešit. Napadá mě třeba zapsat (APPEND) do toho souboru prioritu tohoto požadavku něco jako
99 94381315 1500... mikrosekundy + náhodně vygenerované číslo + čas čekání.
Pokud se tam objeví ještě jeden proces ve stejný čas, tak udělá to samé, zapíše svoje číslo něco jako
99 135485
ten kdo má vyšší prioritu, se provede jako první. Ten s nižším číslem bude čekat 1500 mikrosekund (přečte si předem vypočítaný čas).
Celkově ale dost pochybuju, že by se dva procesy spustily ve stejný čas během 99 mikrosekund.
Soubory starší 10 sekund by se smazaly.