我實現BackgroundWorker
替代出於某種原因,我必須實現以下公共屬性:如何使公共屬性線程安全?
public bool CancellationPending { get; private set; }
public bool IsBusy { get; private set; }
public bool WorkerReportsProgress { get; set; }
public bool WorkerSupportsCancellation { get; set; }
我敢肯定,你知道他們在BackgroundWorker
服務的目的。所以他們可能會被不同的線程訪問/修改。我很擔心如何「保護」他們的多線程。我認爲宣佈他們爲volatile
就足夠了,但volatile
不能應用於自動屬性。
我該怎麼辦?我應該爲這些屬性創建私有字段,並聲明它們爲volatile
?或者我應該在每個get
和set
塊內使用lock
?
我認爲這應該是很常見的情況 - 使屬性(最好是自動屬性)是線程安全的。請注意,在此示例中,所有屬性都是原子類型。
編輯:
爲了澄清什麼,我需要:我需要確保所有線程始終讀取屬性的最先進的日期值。如此反覆https://stackoverflow.com/a/10797326/1081467
,使用volatile
,或lock
ING,或其他任何你的建議。當使用bool
性質原子性保證,所以只有第二個問題是左(讀上TO-:看到了嗎?日期值),那麼你如何正確解決這個問題?當你有非原始類型的屬性時呢?你是否在每個get
和set
塊中放置lock
?
你不能使用'BackgroundWorker'類嗎? –
在每個'get'和'set'塊內使用'locki'ng。或者,讓你的類型不可變。例如,'CancellationPending'不太可能有問題。 – Oded
在這種情況下,「線程安全」是什麼意思? – asawyer