1. gzyueqian
      13352868059

      關(guān)于Linux操作系統(tǒng)文件鎖的幾個(gè)知識(shí)要點(diǎn)

      更新時(shí)間: 2008-03-31 14:08:51來源: 粵嵌教育瀏覽量:642

        文件鎖是Linux上常用的進(jìn)程間同步機(jī)制之一,相比sysv的信號(hào)量,文件鎖更容易使用(sysv信號(hào)量的麻煩之處在于它的key獲取機(jī)制)。

        APUE對(duì)文件鎖做了詳盡的描述,其中需要注意的有以下幾點(diǎn),原文可參見APUE2的14.3節(jié):

        1、文件鎖(file_lock)與文件(確切的說是文件的inode)及進(jìn)程捆綁,Linux實(shí)現(xiàn)中文件的file_lock結(jié)構(gòu)掛在該文件對(duì)應(yīng)的inode結(jié)構(gòu)中,而file_lock結(jié)構(gòu)中包含了該鎖所屬進(jìn)程的pid。這種實(shí)現(xiàn)方式造成了兩種后果:

        a.進(jìn)程退出時(shí),屬于該進(jìn)程的所有文件鎖被釋放。

        b.關(guān)閉加鎖進(jìn)程所屬的任何一個(gè)指向加鎖文件的fd或file時(shí),鎖被釋放。這是由于file_lock結(jié)構(gòu)選擇掛在inode上而不是fd或file(內(nèi)核結(jié)構(gòu),fd的下一站),所以無(wú)法具體區(qū)分文件鎖對(duì)應(yīng)的fd或file上。這點(diǎn)需要特別注意,APUE上列出了兩個(gè)例子,個(gè)對(duì)應(yīng)fd關(guān)閉,第二個(gè)對(duì)應(yīng)file關(guān)閉,這兩種情形都會(huì)導(dǎo)致鎖釋放:

        

      fd1 = open(pathname, ...);
                  read_lock(fd1, ...);
                  fd2 = dup(fd1);
                  close(fd2);
                  fd1 = open(pathname, ...);
                  read_lock(fd1, ...);
                  fd2 = open(pathname, ...)
                  close(fd2);

       

        APUE中有一個(gè)FreeBSD的文件鎖實(shí)現(xiàn)圖可以幫助理解以上內(nèi)容,該圖對(duì)Linux也是適用的。

        2、fork()后子進(jìn)程不繼承父進(jìn)程的鎖,這個(gè)很容易理解,鎖就是被進(jìn)程用來執(zhí)行互斥等任務(wù)的,如果承就亂了。

        3、exec()可以繼承鎖,取決于exec()后加鎖fd是否被關(guān)閉(close-on-exec),這是因?yàn)閑xec()前后進(jìn)程還是一個(gè)。


      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 五月丁香六月综合激情在线观看 | 欧美亚洲另类日韩在线网页 | 五月天AV免费在线观看 | 日韩一级二级一区二区 | 中文字幕在线第一页 | 网友久久更新新视频免费 |