2015-12-23 26 views
0

我的程序中有多個線程,其中一個線程正在內部數據結構上運行。由於某些錯誤,此線程退出時數據結構處於無效狀態。其他線程如何在以後的訪問中正確驗證數據結構的狀態?一般來說,如何處理這種情況?線程終止/退出後驗證數據結構

+1

退出程序並重新開始?否則,恢復取決於錯誤線程在錯誤發生之前所做的確切內容,以及如果確切知道您有哪些錯誤,那麼您大概會修復它們。 –

+1

這取決於你的意思是「一些錯誤」。你的意思是代碼錯誤嗎?硬件問題?什麼樣的數據結構? 「無效狀態」是什麼意思?這是太模糊的回答問題。 (另外,通過用兩種語言標記這一點,你已經使它變得更加廣泛,因爲這兩種語言的線程是非常不同的。)爲什麼不問你感興趣的具體案例,儘可能地提供更多的細節? –

+0

這太寬泛了,但您可能想使用[代碼合同](http://stackoverflow.com/q/260817/96780)。另外,爲什麼這兩種語言標籤? –

回答

0

最好的答案是確保線程不會退出,使數據結構無效。除此之外,唯一的解決辦法是這樣的:

在類:

bool m_data_valid = true; // Or possibly 'false' and set it true in constructor 

在變異螺紋:

m_data_valid = false; 
    ... // Mutate structure 
    m_data_valid = true; 

在其他線程:

if (!m_data_valid) 
     fixup(); // Or whatever you were going to do.