File locking
File locking is a mechanism that enforces access to a computer file by only one user at any specific time. The purpose of locking is to prevent the classic "interceding update" scenario.
The interceding update problem may be illustrated as in the following example: Process 'A' reads a customer record from a file containing account information, including the customer's account balance. Process 'B' now reads the same record from the same file. Process 'A' changes the account balance and writes the new value back to the file. However, process 'B' - which still has the original values of that customer record, makes a different change to its copy of the data (for example, changes the customer's phone number) and re-writes this data to the file. Process B's copy of the data, still containing the original account balance, overwrites the changes made by process A, reverting the account balance to its previous value and causing the update of the customer balance by process 'A' to be lost.
File locking prevents this problem by enforcing the serialization of update processes to any given file. Most operating systems support the concept of record locking which means that individual records within any given file may be locked, so increasing the number of concurrent update processes.
File locking in Windows
Program files are automatically locked upon execution, thus preventing them from being modified or deleted while running. Programs are automatically notified if an open file is being modified by an external program.
The Windows locking approach can result in problems where the operating system or an application crashes without being terminated properly. This leads to a situation where access is denied to files even though they do not appear to be in use, because the operating system or a crashed application still has a lock on the file. The user will in this case have to terminate a program manually or reboot the system to remove the lock.
File locking in UNIX
Open files and programs are not automatically locked in UNIX. File locking does instead have to be done explicitly through the fcntl call, leaving file locking optional to use. Program files are therefore not automatically locked upon execution, leading to the possibility of programs being deleted while they are running. Files opened in one program may also be modified or deleted by an external program without any notification.
The UNIX locking approach leads to problems when an application crash, or is terminated unexpectedly. The application's locks will then continue to exist even though the application has terminated. Such persistent file-locks have to be removed manually by the user.
