我有一個圖像生成器,它將受益於在線程中運行。我打算使用POSIX線程,並根據https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal編寫了一些模擬代碼來測試事情。使用線程,我應該如何處理理想情況下應該按順序發生的事情?
在預期的程序中,當使用GUI時,我希望生成的行從一個接一個地出現到下一個(圖像生成可能非常慢)。
還應該注意,線程中生成的數據不是實際的圖像數據。線程數據被讀取並轉換成RGB數據並放入實際的圖像緩衝區中。在GUI中,線程生成數據轉換爲RGB數據的方式可以在圖像生成過程中進行更改,而無需停止生成圖像。
但是,線程調度程序並不能保證線程會按我想要的順序運行,這不幸使得線程生成數據的轉換變得更加棘手,這意味着保留數組以保持bool值的不良解決方案以指示哪些行完成。
我該如何處理?
目前我有一個觀察者線程來報告圖像完成時(這真的應該是一個進度條,但我還沒有那麼遠,它使用pthread_cond_wait
)。和幾個渲染線程在做
next_line()
做一個互斥鎖,並獲取img_next_line的值,然後遞增它並解鎖互斥鎖。然後渲染該行並執行互斥鎖(與第一個不同)以獲取lines_done對高度的檢查,如果完成,則解鎖並解鎖並返回0,否則返回1。
只是覺得我最好提一下,觀察者線程,渲染線程和next_line函數的上述實現在沒有GUI的情況下工作到複雜的事情。 – 2010-01-07 12:53:54