多個線程同時讀一個數據,不用加鎖是吧?多個線程同時使用一個方法,不用加鎖是吧?多個線程同時使用一個委托,用加鎖嗎?
2 回答
慕村225694
TA貢獻1880條經驗 獲得超4個贊
1:讀取數據的時候,也要看是否有別的線程在寫數據,如果有別的線程在寫,還是需要加鎖的,如果是靜態數據,所有線程只是進行讀取,一般無需枷鎖,當然訪問一些臨界資源,諸如文件操作等還是需要加鎖的。
2:使用一個方法是否需要加鎖,需要看你的方法是否是可重入的,如果需要的數據都是由調用者提供的,在方法內部不會調用其他的不可重入的方法,且方法中不訪問靜態全局的非常量數據、不返回此類數據,這種情況下多線程條用一個方法無需加鎖,如果出現上述情況,則需要將不可重入的方法改造為可重入的。還要考慮一點是在方法內部多線程的線程安全問題,例如出現1中的情況,出現特別出現靜態或者全局數據的訪問的情況。
3:委托的情況和2是類似的。
三國紛爭
TA貢獻1804條經驗 獲得超7個贊
問題一:不一定,看對讀取數據的要求,如果是實時讀取的話還是需要鎖的;
問題二:不一定,如果這個方法中出現問題一的情況也是需要鎖的,但這個鎖只是這個資源的訪問鎖不是方法的鎖,在多線程中方法是各自都有拷貝的,所以不存在競爭關系;
問題三:不一定,問題如二;
- 2 回答
- 0 關注
- 579 瀏覽
添加回答
舉報
0/150
提交
取消
