執行緒干擾錯誤

2021-08-06 02:49:41 字數 1251 閱讀 1741

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修剪命令...