GCD 之多線程并發(fā)讀寫(Barrier Task)

使用 Barrier Task 方法

Dispatch Barrier 解決多線程并發(fā)讀寫同一個資源發(fā)生死鎖。
Dispatch Barrier 可以確保提交的閉包在指定的隊列中,在特定的時間段內(nèi)得到唯一的執(zhí)行。在所有先于 Dispatch Barrier 提交的任務(wù)都完成之后,這個閉包才開始執(zhí)行。輪到 barrier 提交的閉包時,會執(zhí)行這個閉包并且確保隊列在此過程中不會執(zhí)行其它任務(wù)。barrier 閉包完成后隊列恢復(fù)。需要注意 dispatch_barrier_async 只在自己創(chuàng)建的隊列上有這種作用,在全局并發(fā)隊列和串行隊列上,效果和 dispatch_sync 一樣。

事例:高效的防止文件讀寫沖突

可以創(chuàng)建一個并行隊列,操作都在這個隊列中進(jìn)行。沒有更新數(shù)據(jù)的讀用并行,而寫用串行。這樣既可以防止文件讀寫沖突,有可以提高效率。

//創(chuàng)建隊列
_asyncQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

- (NSString *)someString {
    __block NSString *localSomeString = nil;
    dispatch_sync(_asyncQueue, ^{
        localSomeString = _someString;
    });
    return localSomeString;
}

- (void)setSomeString:(NSString *)someString {
    dispatch_barrier_async(_asyncQueue, ^{
        _someString = someString;
    });
}

swift示例

// 創(chuàng)建并行隊列
self.asyncQueue = DispatchQueue.global();

var someString: NSString {
    get {
        // 讀數(shù)據(jù)時使用并行
        var localString: NSString!
        self.asyncQueue.async {
            localString = self.someString;
        }
        return localString
    }
    set {
        // 寫數(shù)據(jù)時使用串行
        asyncQueue.sync(flags: .barrier, execute: {
            self.someString = newValue
        });
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇博客共分以下幾個模塊來介紹GCD的相關(guān)內(nèi)容: 多線程相關(guān)概念 多線程編程技術(shù)的優(yōu)缺點比較? GCD中的三種隊列...
    有夢想的老伯伯閱讀 1,088評論 0 4
  • 從哪說起呢? 單純講多線程編程真的不知道從哪下嘴。。 不如我直接引用一個最簡單的問題,以這個作為切入點好了 在ma...
    Mr_Baymax閱讀 2,911評論 1 17
  • 盡管 Grand Central Dispatch (GCD)已經(jīng)存在一段時間了,但并非每個人都知道怎么使用它。這...
    coderFamer閱讀 7,563評論 1 16
  • 概念 基礎(chǔ) https://github.com/ChenYilong/ParseSourceCodeStudy/...
    西門吹灰閱讀 187評論 0 0
  • 清朝初年,福建省新到了一位巡撫,今年的新科狀元張元。沒有留京任職心中不免有些許怨氣,輕裝簡行的行至城中,打算先感受...
    小天黑閱讀 542評論 0 1

友情鏈接更多精彩內(nèi)容