如果有以下情形:退出螺紋
- Thread0運行代碼調用其他組件。
- Component0被調用Thread0並觸發一個事件。
- 事件處理程序試圖通過設置一個停止標記來停止thread0
- 現在我通常會加入Thread0等待,直到清理完所有東西並完成。但如果我這樣做,我會造成僵局。因此,讓我們說,我只是設置標誌退出完成Thread0爲真,並返回到Component0事件的事件處理程序。
- Eventhandler的下一行嘗試處理Thread0正在使用的資源。請記住:Thread0仍在運行,因爲我無法等待它,因爲嘗試停止Thread0的事件處理程序在Thread0的上下文中執行。
- 現在事件處理程序已完成,並且Thread0嘗試使用以前處置的資源>,這會導致未知行爲。
目前我在處理所有組件之後立即要求標記,無論它是否處置完畢。如果它被處置了,我打破了退出線程。
是否有更好的模式來處理這種複雜的行爲。
爲什麼不僅僅處理Thread0在主循環結束時使用的資源(在標誌已被發現以指示線程應該停止之後)? –
我不明白你的流程..它寫得不好,但如果你有成員國旗,考慮將其標記爲易變。 – ilansch
我不完全清楚你在做什麼,但在我看來,放棄一個線程最簡潔的方法是拋出一個異常,讓它冒泡到它應該被記錄的外部範圍或任何合適的地方。 –