實施store_lock()函數 |
發布時間: 2012/8/23 16:56:35 |
在執行任何讀取或寫操作之前,調用store_lock()函數。
將鎖定添加到表鎖定處理程序之前(請參見thr_lock.c),mysqld將用請求的鎖調用存儲鎖定。目前,存儲鎖定能將寫鎖定更改為讀鎖定(或其他鎖定),忽略鎖定(如果不打算使用MySQL鎖定的話),或為很多表添加鎖定(就像使用MERGE處理程序時作的那樣)。
例如,Berkeley DB能將所有的WRITE鎖定更改為TL_WRITE_ALLOW_WRITE(表示我們正在執行WRITES,但我們仍允許其他人員進行操作)。 釋放鎖定時,也將調用store_lock(),在這種情況下,通常不需做任何事。
在某些特殊情況下,MySQL可能會發送對TL_IGNORE的請求。這意味著我們正在請求與上次相同的鎖定,這也應被忽略(當我們打開了表的某一部分時,如果其他人執行了表刷新操作,就會出現該情況,此時,mysqld將關閉并再次打開表,然后獲取與上次相同的鎖定)。我們打算在將來刪除該特性。 可能的鎖定類型定義于includes/thr_lock.h中,并列在下面: 電腦常識www.boydavid.com enum thr_lock_type
{
TL_IGNORE=-1,
TL_UNLOCK, /* UNLOCK ANY LOCK */ 計算機學習網站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. */ 電腦知識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
實際的鎖定處理因鎖定實施的不同而不同,你可以選擇某些請求的鎖定類型或不選擇任何鎖定類型,并根據情況恰當地代入你自己的方法。 本文出自:億恩科技【www.laynepeng.cn】 |