counter由於這兩個操作c都是單一的簡單語句,因此可能看不到對交織例項進行操作。然而,即使簡單的語句也可以轉換為虛擬機器的多個步驟。我們不會檢查虛擬機器所採取的具體步驟 - 只要知道單個表示式c++就可以分解成三個步驟:
檢索當前值c。
將檢索到的值增加1。
將增加的值儲存回來c。
表示式c–可以以相同的方式分解,除了第二步減少而不是增量。
執行緒a:檢索c。
執行緒b:檢索c。
執行緒a:增加檢索值; 結果是1。
執行緒b:減去檢索值; 結果為-1。
執行緒a:將結果儲存在c中; c現在是1。
執行緒b:儲存結果c; c現在是-1。
執行緒a的結果丟失,被執行緒b覆蓋。這種特定的交織只是一種可能性。在不同的情況下,執行緒b的結果可能會丟失,或者完全沒有錯誤。因為它們是不可預知的,執行緒干擾的bug可能難以檢測和修復。
import
static org.junit.assert.*;
import org.junit.test;
/** *執行緒干擾,導致的錯誤的寫
*/public
class
testinterference );
thread add2 = new thread(()->);
/*** 測試兩個執行緒同時增加10000次,而結果卻少於20000
*/add1.start();
add2.start();
add1.join();
add2.join();
assertnotequals(c.value(), 20000);
}@test
public
void
testinandde() throws interruptedexception);
thread add2 = new thread(()->);
/*** 測試兩個執行緒,乙個增加10000次,另乙個減少10000次,而結果卻不為0
*/add1.start();
add2.start();
add1.join();
add2.join();
assertnotequals(c.value(), 0);
}}class counter
public
void
decrement()
public
intvalue()
}
執行緒外部 干擾
package com.test1 終止執行緒 1 執行緒正常執行完畢 次數 2 外部干涉 加入標識 不要使用stop destroy public class terminatethread implements runnable 1 加入標識 標記執行緒體是否可以執行 private boole...
共模干擾 差模干擾
要明白共模電感的應用就得先明白什麼是共模干擾,差模干擾。共模和差模都是乙個相對量,共模是指兩個訊號a,b相對於參考點 gnd 的電勢,差模是指a,b之間的相對值。共模干擾是指兩個訊號線對地的干擾,如果環境對兩個訊號線對地之間產生對地的同向等幅的干擾 疊加相同的電壓 那麼就叫共模干擾,之所以說差分訊號...
php 干擾曲線,曲線干擾控制
以前一直是用 pro e,現在老闆對我們有更高的要求,不僅要求會做結構,還要求外觀也 一起做.那只好自己充電了.我希望更快的學好這門軟體,掌握更多的竅門,少走一些彎路,但對 於我這個剛接觸犀牛十幾天的晚輩來說,還需要更多的努力,請各位前輩不吝賜教.1.單一的曲面和實體的切割都可以用 trim修剪命令...