應用中多線程的存在打開了一個潛在的關于執(zhí)行多線程安全訪問資源問題。兩個線程修改相同的資源可能會以意想不到的方式相互妨礙。例如,一個線程可能覆蓋另一個線程的更改或讓應用進入一個未知潛在無效狀態(tài)。如果你幸運,毀壞的資源也能導致明顯的性能問題或相對容易追蹤和修復的崩潰。如果你不幸,然而,毀壞的資源可能導致微妙的錯誤,一直不顯現(xiàn)直到很久以后,或者錯誤可能需要對底層編碼設計進行徹底檢查。
成都創(chuàng)新互聯(lián)主營洛隆網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都App定制開發(fā),洛隆h5微信平臺小程序開發(fā)搭建,洛隆網(wǎng)站營銷推廣歡迎洛隆等地區(qū)企業(yè)咨詢當涉及到線程安全時,好的設計是最好的保護。避免資源共享和減少線程間的交互使它們不太相互干擾。一個完全抗干擾的設計并不存在,然而。線程必須交互的情況下,你需要使用同步工具以確保當它們相互作用是他們這樣做是安全的。
OSX和iOS提供大量的同步工具,延伸到提供互斥訪問應用中序列事件的工具。以下章節(jié)描述這些工具以及如何在你的代碼中使用它們來安全訪問程序中的資源。
為了防止不同線程意外的更改數(shù)據(jù),你可以設計你的應用沒有同步問題或者你可以使用同步工具。盡管避免同步問題是完全可取的,這并不總是可能。以下章節(jié)描述供你使用的同步工具的基本類別。
原子操作是同步的一種簡單形式,用于簡單數(shù)據(jù)類型。原子操作的優(yōu)點是他們不阻塞競爭線程。對于簡單的操作,例如增加計時器變量,比鎖這會有更好的性能。
OSX和iOS包含許多操作來執(zhí)行32位和64位值的基本數(shù)學和邏輯操作。這些操作是比較-交換、測試-設置、測試-清除操作的原子版本。關于支持的原子操作的列表,見 /usr/include/libkern/OSAtomic.h
頭文件或原子(atomic)手冊頁。
為了實現(xiàn)最優(yōu)性能,編譯器常常重新排序匯編級別指令來盡可能保持處理器指令管道完整。作為這種優(yōu)化的一部分,編譯器可能重新排序指令,當它認為這樣做不會產(chǎn)生不正確的數(shù)據(jù),這些指令會訪問主要內(nèi)存。不幸的是,檢測所有依賴內(nèi)存的操作對編譯器來說不可能。如果看似獨立的變量相互影響,編譯器優(yōu)化可能以錯誤的順序更新這些變量,產(chǎn)生不正確的結果。
內(nèi)存屏障是一種非阻塞同步工具用來確保內(nèi)存操作以正確的順序發(fā)生。內(nèi)存屏障就像一個柵欄,迫使處理器完成任何在柵欄前面的加載和存儲操作,然后才允許執(zhí)行柵欄后面的加載和存儲操作。內(nèi)存屏障通常用于確保線程(但看上去是另一個線程)的內(nèi)存操作以預期的順序發(fā)生。在這種情況下沒有內(nèi)存屏障可能讓其他線程看到貌似不可能的結果。(例如,見維基百科的內(nèi)存屏障(memorybarriers)條目。)為了使用內(nèi)存屏障,你只需在你代碼適當?shù)奈恢谜{(diào)用OSMemoryBarrier
函數(shù)。
不穩(wěn)定變量應用另一種類型的內(nèi)存來約束獨立變量。編譯器通常通過加載變量值到寄存器來優(yōu)化代碼。對于局部變量,這通常不是一個問題。然而如果該變量對另一個線程是可見的,這樣的優(yōu)化可能會阻止其他線程注意該值的變化。變量使用volatile
關鍵字,每次使用該變量時,將強制編譯器從內(nèi)存中加載該變量。如果變量的值可能在任何時候被外部來源改變,且編譯器無法檢測到,你可以聲明一個變量為volatile
。
因為內(nèi)存屏障和不穩(wěn)定變量減少編譯器可執(zhí)行的優(yōu)化,應該謹慎使用它們并只在需要的地方使用以確保正確性。關于使用內(nèi)存屏障的更多信息,參見OSMemoryBarrier 手冊頁。
鎖是最常用的同步工具之一。你可以使用鎖來保護你代碼的關鍵部分,這段代碼只允許一個線程訪問。例如,一個關鍵部分可能操作特定數(shù)據(jù)結構或使用一些最多一次支持一個客戶端的資源。通過這章的鎖,你可以排除其他線程進行影響代碼正確性的更改。
表4-1 列出了程序員常用的一些鎖。OS X和iOS提供大部分類型鎖的實現(xiàn),但不是全部。對于不支持鎖類型,說明列解釋了這些鎖在平臺上不直接實現(xiàn)的原因。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡助力業(yè)務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務器買多久送多久。
標題名稱:同步(Synchronization)-創(chuàng)新互聯(lián)
URL標題:http://aaarwkj.com/article26/ppgcg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、品牌網(wǎng)站設計、網(wǎng)站維護、用戶體驗、網(wǎng)站改版、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容