所以,我一直在尋找隨機的linux手冊頁,當我遇到這個奇怪的手冊時,你可以通過執行“man unlocked_stdio”來查看它,或者你可以在瀏覽器中通過這個頁面查看它
那么,這是為了什么?它有一些奇怪的函式,比如 getc_unlocked、getchar_unlocked、putc_unlocked、putchar_unlocked 等,所有這些函式都有一個共同點,它們有一個 FILE 流引數,我知道所有這些函式都是普通的 IO 函式,它們附加了一個“_unlocked” , 但是,這是什么意思?
uj5u.com熱心網友回復:
它與執行緒安全有關。
從你的鏈接
這些函式中的每一個都與沒有“_unlocked”后綴的對應函式具有相同的行為,除了它們不使用鎖定(它們自己不設定鎖,也不測驗其他人設定的鎖是否存在),因此是執行緒-不安全。參見群檔案(3)。
并從flockfile:
stdio 函式是執行緒安全的。這是通過為每個 FILE 物件分配一個鎖計數和(如果鎖計數非零)一個擁有執行緒來實作的。對于每個庫呼叫,這些函式等到 FILE 物件不再被不同的執行緒鎖定,然后鎖定它,執行請求的 I/O,并再次解鎖物件。
一些顯示其作業原理的偽代碼。這不一定是它在現實中的實作方式,但它展示了這個想法,并清楚地顯示了與解鎖版本的區別。從功能上講,鎖定版本本質上是未鎖定版本的封裝。
int getchar(void) {
// Wait until stdinlock is unlocked and then lock it
// This is an atomic operation
wait_until_unlocked_and_then_lock(stdinlock);
// Get the character from stdin
int ret = getchar_unlocked();
// Release the lock to make the input stream available to other threads
unlock(stdinlock);
// And return the value
return ret;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491926.html