napadlo mi toto:
1.skontrolujeme ci existuje foo-lockfile
2.ak ano->cakame kym sa uvolni zamok
ak nie-> echo $PID >>foo-lockfile
3.skontrolujeme ci cislo na zaciatku foo-lockfile je pid nasho procesu
ak ano-> zamok je nas
ak nie-> cakame kym sa uvolni zamok
to by malo stacit,ak si to dobre pamatam z unixovych cviceni:)
a co ked dva konkurencne procesy budu prebiehat takto:
p1: kontrola => subor neexistuje
p2: kontrola => subor neexistuje
p1: echo $PID >> foo-lockfile
p1: kontrola => cislo pid je nase => zamok je nas
p2: echo $PID >> foo-lockfile
p2: kontrola => cislo pid je nase => zamok je nas
A co takhle:
p1: kontrola => subor neexistuje
p2: kontrola => subor neexistuje
p1: echo $PID >> foo-lockfile
p2: echo $PID >> foo-lockfile
p1: kontrola => cislo pid neni nase => zamok neni nas
p2: kontrola => cislo pid neni nase => zamok neni nas
Nebo proste situace, kdy p1 nestihne zapsat vse pred tim, nez zacne zapisovat p2 - pak se bude zapisovat na preskacku a pod.
Nic takoveho fungovat nebude...
Jediny zpusob, jak lze efektivne zamykat nejaky proces na nejakem zdroji, je pozadat o to jadro (mutexy semafory,...).