2017年1月26日 星期四

取像與處裡與lock

在處理影像同時如果剛好對影像進行更新,有可能會出現錯誤。因為在處裡的時候影像被更新,或是將更新到一半的影像送去處理。
這時候可以用lock
void Process(Image image)
{
    lock(image)
    {
        //processing
     }
}
void Updating(Image image)
{
    lock(image)
    {
        //updating
    }
}
lock會鎖定image的實體,因此就算是
var b = a;
lock(a)
{
    //sec a
}
lock(b)
{
    //sec b
}
sec a跟sec b 也不會同時被進入
另外,有趣的一點是VS的timer並非每個timer都有自己的thread,而是共用主執行續的thread,因此如果在tick()卡太久,主UI會卡住。但也因為這樣,timer之間的code不會同時執行,因此不用使用lock來避免資源被同時使用。

沒有留言:

張貼留言