Dosya kilitleme, yazılım geliştiricilerin genellikle arka planda çalışan veritabanları veya benzeri API'ler aracılığıyla dolaylı olarak kullandığı bir mekanizma olsa da, doğrudan uygulamak gerektiğinde beklenenden çok daha karmaşık ve güvenilmez bir süreçtir. Yazarın deneyimleri, Unix sistemleri arasında hatta aynı sistemin farklı sürümleri arasında bile büyük farklılıklar gösteren bu konunun, yaygın kanının ötesinde bir karmaşıklığa sahip olduğunu ortaya koyuyor. Basit kilit dosyaları dışında, Unix'te başlıca üç dosya kilitleme API'si bulunmaktadır: flock(), fcntl() ve lockf().
flock() API'si, BSD kökenli olup POSIX tarafından standartlaştırılmamıştır, bu da bazı Unix sistemlerinde desteklenmediği anlamına gelir. Bu API, bir dosyanın tamamını kilitler ve eş zamanlı okuma için paylaşımlı (shared) kilitler ile tekil yazma için özel (exclusive) kilitleri destekler. Ancak flock() kilitleri NFS üzerinde çalışmaz ve paylaşımlı bir kilidi özel bir kilide yükseltme işlemi (upgrade) bir yarış koşulu (race condition) riski taşır; çünkü bu işlem aslında mevcut kilidi serbest bırakıp yeni bir kilit almaya çalışır. Ayrıca, fork() çağrıları veya ilgisiz dosyaların kapatılması durumunda flock() kilitlerinin davranışı, bazı sistemlerin flock()'u fcntl() kullanarak taklit etmesi nedeniyle belirsizdir. fcntl() ise POSIX tarafından standartlaştırılmış bir kilitleme yöntemidir.
Dosya kilitleme mekanizmalarının işletim sistemleri arasındaki tutarsızlığı ve karmaşıklığı, veri bütünlüğü ve uygulama güvenilirliği açısından ciddi zorluklar yaratmaktadır.