當多執行緒併發訪問乙個方法(函式)時的執行緒安全問題
首先, 所有執行緒訪問的是同乙個方法嗎? no, 方法之於執行緒 就好像 程式之於程序一樣,每一次執行都是獨立的, 是在某乙個資料集上的一次執行.
這樣來看: 方法是一段程式**,在記憶體某個空間,假設是0000h到0100h,執行緒a執行到0050h時被打斷,
執行緒b開始從0000h執行,他們執行的是同乙個方法嗎? 的確是的, 他們都在執行相同的指令**,但是,他們都是獨立的執行工作在不同的資料集上(他們的外部環境不一樣了),
當資料集相同時,那顯然是執行緒安全的,n個執行緒一起執行,結果都一樣.
結論
方法裡面定義的變數是執行緒獨有並且安全的, 只有涉及到了共享資源和變數時才有執行緒安全問題. 所以外部共享資料不安全,當執行緒要互斥訪問這些資料時,需要加入同步機制,
常用的同步機制是加鎖,而加鎖可能會導致死鎖,在使用鎖時要注意避免死鎖, 如何避免:摘自《作業系統》互斥的訪問資源, 迴圈等待資源,持有且等待資源,不可剝奪資源, 這是發生死鎖的必要條件.死鎖的避免就是要破壞這4中條件之一.
任何舉動之前,先思考,思考,再思考
windows 使用者態程式高效排錯 之讀書筆記 之所以會讀 windows 使用者態程式高效排錯 這本書,是因為某個賣儲存的技術大拿不停地給我丟 case 一些雖然看起來很容易,但是設計細節部分的 case 讓人崩潰。在這段時間陸續重新開始使用 netmon windbg 等工具來幫助排錯。無奈,...
雜湊表 再思考
雜湊表具有和陣列相同的可以根據下標實現隨機訪問的特性。陣列查詢的特性 陣列的儲存空間是連續的,因此對取值 訪問 操作比較友好,支援根據下標實現隨機訪問,時間複雜度為 o 1 雜湊表 雜湊表採用了陣列可以根據下標實現隨機訪問,時間複雜度為 o 1 的特性。問 1 那雜湊表是怎樣將陣列的特性應用到自身的...
介面測試再思考
寫在前面 為什麼要做介面測試?這個命題本身就是乙個比較寬泛的範疇,我也是在工作和學習中對這個命題常思考 常更新,不斷豐富對介面測試的理解。端午假期,沒有外出安排,放下火熱的俄羅斯世界盃,正是學習總結的好時間,在testerhome論壇上看到了一篇雖然篇幅短小,但是質量很好的文章,促使自己也想寫點東西...