多線程中NSLock

//線程1

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        [lock lock];

        [obj method1];

        sleep(30);

        [lock unlock];

    });

    

    //線程2

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        sleep(5);//以保證讓線程2的代碼後執行

        [lock lock];

        [obj method2];

        [lock unlock];

    });
總結
使用時,基本方法就是:

[lock lock];

[obj yourMethod];

[lock unlock];

 我們稱[obj yourMethod]關鍵部分

NSLock的執行原理:

某個線程A調用lock方法。這樣,NSLock將被上鎖。可以執行“關鍵部分”,完成後,調用unlock方法。

如果,在線程A 調用unlock方法之前,另一個線程B調用了同一鎖對象的lock方法。那麼,線程B只有等待。直到線程A調用了unlock。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章