标签:
如果一个文件被两个人同时修改会出现什么结果呢?在很多unix系统中,该文件的最后状态取决于写该文件的最后一个进程。但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件。为了向进程提供这种功能,商用unix系统提供了记录锁机制。
记录锁的功能是:当一个进程正在读或修改文件的某个部分时,它可以组织其他进程修改同一文件区。对于unix系统而言,“记录”这个次是一种误会,因为unix系统内核根本没有使用文件记录这种概念。更适合的术语可能是“字节范围锁”,因为它锁定的是文件中的一个区域,也可以是整个文件。
基本原则是:多个进程在一个给定的字节上可以有一把共享的读锁,但是在一个给定字节上只能有一个进程独用的一把思索。如果一个给定字节上已经有一把或多把读锁,则不能在该字节上再加死锁,如果在一个字节上已经有一把独占性的写锁,则不能再对它加任何读锁
死锁
如果两个进程相互等待对方持有并且锁定的资源时,则这两个进程就处于死锁状态。如果一个进程已经控制了文件中的一个加锁区域,然后它又试图对另一个今晨控制的区域加锁,则它就会休眠,在这种情况下,有可能会发生死锁。锁与进程和文件两方面有关。这有两重含义:第一重很明显,当一个进程终止时,它所建立的锁全部释放,第二重意思就不很明显,任何时候关闭一个描述符时,则该进程通过这一描述符可以引用的文件上的任何一把锁都被释放(这些锁都是该进程设置的)。
建议性锁和强制性锁
考虑数据库访问程序,如果该库中所有函数都以一致的方法处理记录所,则称使用这些函数访问数据库的任何进程集合为合作进程。如果这些函数是仅有的用来访问数据库函数,那么它们使用建议性锁是可行的。但是建议性锁并不能阻止对数据库文件有写权限的任何其他进程对数据库文件进行随意的写操作。没有使用被认可的方法(数据库函数库)访问数据库的进程是一个非合作进程。标签:
原文地址:http://blog.csdn.net/bugall/article/details/44831097