2 回答

TA貢獻(xiàn)1880條經(jīng)驗 獲得超4個贊
1:讀取數(shù)據(jù)的時候,也要看是否有別的線程在寫數(shù)據(jù),如果有別的線程在寫,還是需要加鎖的,如果是靜態(tài)數(shù)據(jù),所有線程只是進(jìn)行讀取,一般無需枷鎖,當(dāng)然訪問一些臨界資源,諸如文件操作等還是需要加鎖的。
2:使用一個方法是否需要加鎖,需要看你的方法是否是可重入的,如果需要的數(shù)據(jù)都是由調(diào)用者提供的,在方法內(nèi)部不會調(diào)用其他的不可重入的方法,且方法中不訪問靜態(tài)全局的非常量數(shù)據(jù)、不返回此類數(shù)據(jù),這種情況下多線程條用一個方法無需加鎖,如果出現(xiàn)上述情況,則需要將不可重入的方法改造為可重入的。還要考慮一點是在方法內(nèi)部多線程的線程安全問題,例如出現(xiàn)1中的情況,出現(xiàn)特別出現(xiàn)靜態(tài)或者全局?jǐn)?shù)據(jù)的訪問的情況。
3:委托的情況和2是類似的。

TA貢獻(xiàn)1804條經(jīng)驗 獲得超7個贊
問題一:不一定,看對讀取數(shù)據(jù)的要求,如果是實時讀取的話還是需要鎖的;
問題二:不一定,如果這個方法中出現(xiàn)問題一的情況也是需要鎖的,但這個鎖只是這個資源的訪問鎖不是方法的鎖,在多線程中方法是各自都有拷貝的,所以不存在競爭關(guān)系;
問題三:不一定,問題如二;
- 2 回答
- 0 關(guān)注
- 553 瀏覽
添加回答
舉報