When a high-level language program uses a file, several operations require that the server allocate the resources that are needed to perform that operation. The server generally does this to ensure that multiple users do not use the file in conflicting ways.
For example, the server will not allow you to delete a file while any application program is using it. The server does this by obtaining a lock on the file when it opens. The delete file operation also attempts to get a lock on the file and is unsuccessful because the program using the file still has the lock from when the file was opened, and the locks conflict.