Ergo, die optimal flock() Lösung ist so?
open (FILE, "file.ext");
flock(FILE,2);
#do your stuff
close(FILE);
Das kommt darauf an, was Du unter "optimal" verstehst.
Dein eigener Ansatz hatte ja immerhin ein Timeout-Konzept, was für eine CGI-Anwendung keine schlechte Idee ist (sonst gibt es einen Timeout durch den Webserver, und alles zerfällt zu feinstem Staub). flock() in der obigen Form ist abhängig von seiner Umwelt - und wenn diese das Semaphor ewig blockiert, dann hängst Du eben fest.
Deshalb fände ich ja eine "Test and Set"-Operation besser - die würde genau das tun, was Du willst, und das Wartezeitverhalten könntest Du selbst regeln.