實(shí)施store_lock()函數(shù) |
發(fā)布時(shí)間: 2012/8/23 16:56:35 |
在執(zhí)行任何讀取或?qū)懖僮髦,調(diào)用store_lock()函數(shù)。
將鎖定添加到表鎖定處理程序之前(請(qǐng)參見(jiàn)thr_lock.c),mysqld將用請(qǐng)求的鎖調(diào)用存儲(chǔ)鎖定。目前,存儲(chǔ)鎖定能將寫鎖定更改為讀鎖定(或其他鎖定),忽略鎖定(如果不打算使用MySQL鎖定的話),或?yàn)楹芏啾硖砑渔i定(就像使用MERGE處理程序時(shí)作的那樣)。
例如,Berkeley DB能將所有的WRITE鎖定更改為TL_WRITE_ALLOW_WRITE(表示我們正在執(zhí)行WRITES,但我們?nèi)栽试S其他人員進(jìn)行操作)。 釋放鎖定時(shí),也將調(diào)用store_lock(),在這種情況下,通常不需做任何事。
在某些特殊情況下,MySQL可能會(huì)發(fā)送對(duì)TL_IGNORE的請(qǐng)求。這意味著我們正在請(qǐng)求與上次相同的鎖定,這也應(yīng)被忽略(當(dāng)我們打開(kāi)了表的某一部分時(shí),如果其他人執(zhí)行了表刷新操作,就會(huì)出現(xiàn)該情況,此時(shí),mysqld將關(guān)閉并再次打開(kāi)表,然后獲取與上次相同的鎖定)。我們打算在將來(lái)刪除該特性。 可能的鎖定類型定義于includes/thr_lock.h中,并列在下面: 電腦常識(shí)www.boydavid.com enum thr_lock_type
{
TL_IGNORE=-1,
TL_UNLOCK, /* UNLOCK ANY LOCK */ 計(jì)算機(jī)學(xué)習(xí)網(wǎng)站www.boydavid.com
TL_READ, /* Read lock */
TL_READ_WITH_SHARED_LOCKS,
TL_READ_HIGH_PRIORITY, /* High prior. than TL_WRITE. Allow concurrent insert */
TL_READ_NO_INSERT, /* READ, Don't allow concurrent insert */
TL_WRITE_ALLOW_WRITE, /* Write lock, but allow other threads to read / write. */ 電腦軟件www.boydavid.com
TL_WRITE_ALLOW_READ, /* Write lock, but allow other threads to read / write. */
TL_WRITE_CONCURRENT_INSERT, /* WRITE lock used by concurrent insert. */ 電腦知識(shí)www.boydavid.com
TL_WRITE_DELAYED, /* Write used by INSERT DELAYED. Allows READ locks */
TL_WRITE_LOW_PRIORITY, /* WRITE lock that has lower priority than TL_READ */
TL_WRITE, /* Normal WRITE lock */
TL_WRITE_ONLY /* Abort new lock request with an error */
}; 電腦技巧www.boydavid.com
實(shí)際的鎖定處理因鎖定實(shí)施的不同而不同,你可以選擇某些請(qǐng)求的鎖定類型或不選擇任何鎖定類型,并根據(jù)情況恰當(dāng)?shù)卮肽阕约旱姆椒ā?/p> 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |