1 a程序需要讀取5號檔案1234號塊。
2 b程序需要修改5號檔案1234號塊。
步驟1:a程序在bh中成功設定buffer pin鎖,注意,此時a程序的cbc latch已經釋放,a程序在buffer pin鎖的保護下訪問buffer資料。
步驟2:b程序想修改buffer,它首先要獲取cbc latch。
步驟3:b程序檢視bh發現bh中的buffer pin鎖的狀態,發現為其他程序設定的s鎖,b程序會等待嗎,不會!
步驟4:b程序會做很多任務作,它會在原來的bh中也留下 共享的buffer pin鎖,然後釋放cbc,在s鎖的保護下,將原來的buffer複製到另外的buffer cache中,增加乙個新的bh,這一過程需要cbc的保護下程序,新的bh建立完畢後,釋放cbc,hash鏈中多了乙個一模一樣的bh,buffer cache池中多了一模一樣的buffer。bh中多的以上status表示為buffer的狀態,原buffer中status為xcur,新的未有值。
步驟5,:在源buffer成功複製到另外乙個buffer後,原來的cbc latch多增加乙個bh,首先獲取cbc,將原來的buffer status列修改為cr,新bh中的status為xcur,同時在buffer pin修改為x,進行修改buffer。
步驟6:釋放cbc latch,在獨佔buffer pin鎖的狀態下修改buffer。
步驟7:如果此時有c程序需要修改這個buffer中的其他資料行,則需要進行等待,等待為buffer busy waits。
xcur是當前塊,cr為一致性讀取塊。
讀不堵塞寫的原理為將正在讀取的資料塊轉化為cr塊,複製新的資料塊進行修改狀態為xcur(當前塊),修改buffer pin為x。
非阻塞讀和寫版 TCP回顯C S
通過fcntl設定套接字,標準輸出,標準輸入為非阻塞 客戶端 include include include include include include include include include include define bufsize 4096 int max int a,int b...
C 管理系統 檔案寫讀2
基於2020 11 26發的部落格 框架,實現將螢幕輸入資訊存入檔案並讀取輸出到螢幕上 1.主要建立了乙個info.h標頭檔案用來定義乙個類管理多個實現函式,如下 include 包含標準輸出輸入流標頭檔案 using namespace std 使用標準命名空間 class info 定義乙個類管...
HDFS兩大核心 檔案的讀和寫
使用hdfs提供的客戶端client向遠端的namenode發起rpc請求。namenode接收到客戶端的請求後會檢查要建立的檔案是否存在,建立者是否有權進行操作,成功則有權操作,否則將會向客戶端報錯。客戶端真正的提交上傳檔案的請求,請求中包含乙個重要的資訊 就是檔案的大小,計算檔案需要切塊的個數 ...