與互斥鎖定相比,讀-寫鎖定允許對共享資料進行更高階別的併發訪問。雖然一次只有乙個執行緒(
writer 執行緒)可以修改共享資料,但在許多情況下,任何數量的執行緒可以同時讀取共享資料(
reader 執行緒),讀-寫鎖定利用了這一點。從理論上講,與互斥鎖定相比,使用讀-寫鎖定所允許的併發性增強將帶來更大的效能提高。在實踐中,只有在多處理器上並且只在訪問模式適用於共享資料時,才能完全實現併發性增強。
public class test14 catch (interruptedexception e)
}}.start();
} for(int i=0;i<3;i++) catch (interruptedexception e) }};
/*在 writer 釋放寫入鎖定時,reader 和 writer 都處於等待狀態,在這時要確定是授予讀取鎖定還是授予寫入鎖定。
writer 優先比較普遍,因為預期寫入所需的時間較短並且不那麼頻繁。reader 優先不太普遍,因為如果 reader
正如預期的那樣頻繁和持久,那麼它將導致對於寫入操作來說較長的時延。公平或者「按次序」實現也是有可能的。 */
t.setpriority(7);//讓"寫"有優先的能力,因為如果讀的時間太多或頻繁的話,寫就會一直延時等待,這樣不利於及時性
t.start(); }
}/**
讀寫鎖:分為讀鎖和寫鎖,多個讀鎖不互斥,讀鎖與寫鎖互斥,寫鎖與寫鎖互斥,這是由jvm自己控制的
只要沒有 writer,讀取鎖定可以由多個 reader 執行緒同時保持。寫如鎖定是獨佔的。
*/static class localreadwritertestfinally
} public void writedata(int data) throws interruptedexceptionfinally }}
}/*執行結果:
thread-0 :開始讀取....
thread-1 :開始讀取....
thread-0 :null
thread-0 :讀取完畢....
thread-1 :null
thread-1 :讀取完畢....
thread-4 :開始寫入....
thread-4 寫入的值:470
thread-4 :寫入完畢....
thread-3 :開始寫入....
thread-3 寫入的值:730
thread-3 :寫入完畢....
thread-5 :開始寫入....
thread-5 寫入的值:409
thread-5 :寫入完畢....
thread-2 :開始讀取....
thread-2 :409
thread-2 :讀取完畢....
*/
讀寫鎖的簡單示例
使用讀寫鎖實現四個執行緒讀寫一段程式的例項,共建立了四個新的執行緒,其中兩個執行緒用來讀取資料,另外兩個執行緒用來寫入資料。在任意時刻,如果有乙個執行緒在寫資料,將阻塞所有其他執行緒的任何操作。include include include include include pthread rwloc...
執行緒鎖的運用
多個執行緒對同乙個資料進行修改時,可能會出現不可預料的情況.1.例項化乙個鎖物件 lock threading.lock 2.操作變數之前進行加鎖 lock.acquire 3.操作變數之後進行解鎖 lock.release import threading 以銀行存錢和取錢舉例 def add l...
Linux 互斥鎖 讀寫鎖 條件變數簡單認識
執行緒同步 協調同步,對公共區域資料按序訪問,防止資料混亂,產生於時間有關的錯誤 鎖的使用 對公共資料進行保護,所有執行緒 應該 在訪問公共資料前先拿到鎖再訪問,但鎖本身不具備強制性 mutex的主要應用函式 pthread mutex init初始化 pthread mutex destory銷毀...