線程的不安全是由于多線程訪問和修改共享資源而引起的不可預(yù)測的結(jié)果。 ios多線程開發(fā)中為保證線程的安全常用到的幾種鎖: NSLock 、 dispatch_semaphore 、 NSCondition 、 NSRecursiveLock 、 @synchronized 。
創(chuàng)新互聯(lián)專注于昭蘇網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供昭蘇營銷型網(wǎng)站建設(shè),昭蘇網(wǎng)站制作、昭蘇網(wǎng)頁設(shè)計、昭蘇網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造昭蘇網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供昭蘇網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
自旋鎖:線程一直是running(加鎖——解鎖),死循環(huán)(忙等 do-while)檢測鎖的標(biāo)志位,機(jī)制不復(fù)雜。
分類:隊列分為串行、并行、主隊列、全局隊列。任務(wù)的執(zhí)行是在線程上去執(zhí)行的。分為同步和異步。所以就可以分成:串行隊列同步執(zhí)行、串行隊列異步執(zhí)行、并行隊列同步執(zhí)行、并行隊列異步執(zhí)行。
如性能方面要求不是非常高的話,使用該鎖還更簡便。讀方法中的同步sync是為了柵欄函數(shù)讀寫互斥。 讀寫互斥,多讀單寫 [注意] 死鎖:當(dāng)前線程在串行隊列中,gcd同步(dispatch_sync)同一串行隊列,導(dǎo)致線程死鎖。
iOS 線程加鎖的方式具體有如下幾種:NSLock實現(xiàn)的鎖。
首先,先創(chuàng)建一個簡單地工程。如圖。這里我們選擇“SingleViewApplication”工程。名字就叫“ZYScreenTest”。位置選擇桌面就可以了。
可以,設(shè)置好約束,然后就可以在code中動態(tài)調(diào)節(jié)label的大小了。
Resolved - Target - xcconfig - Project - iOS Default。順序是從右到左,cocoapods生成的xcconfig文件優(yōu)先級高于在target里的設(shè)置。
除了AutoLayout,AutoresizingMask也是一種布局方式。這個想必大家都有了解。默認(rèn)情況下,translatesAutoresizingMaskIntoConstraints = true , 此時視圖的AutoresizingMask會被轉(zhuǎn)換成對應(yīng)效果的約束。
還是和以前一樣的訪問frame,只不過一定要等autolayout完成之后再去訪問。 事實上采用auto layout后就應(yīng)該忘記frame,因為frame的值是動態(tài)生成的。
在使用storyboard和xib時,我們經(jīng)常要用到ScrollView,還有自動 布局AutoLayout,但是ScrollView和AutoLayout 結(jié)合使用,相對來說有點復(fù)雜。
1、自旋鎖:線程一直是running(加鎖——解鎖),死循環(huán)(忙等 do-while)檢測鎖的標(biāo)志位,機(jī)制不復(fù)雜。
2、NSLock -- 互斥鎖 NSCondition -- 互斥鎖 生產(chǎn) -- 消費 與NSLock同樣遵守NSLocking的協(xié)議,有同樣的lock、unlock的api。NSConditionLock -- 互斥鎖 是基于NSCondition進(jìn)一步封裝,自帶條件。
3、lockBeforeDate:方法會在所指定Date之前嘗試加鎖,如果在指定時間之前都不能加鎖,則返回NO。
4、NSConditionLock 用于需要根據(jù)一定條件滿足后進(jìn)行 加鎖/解鎖.首先看下API 下面就看一下適用場景 此鎖可以在同一線程中多次被使用,但要保證加鎖與解鎖使用平衡,多用于遞歸函數(shù),防止死鎖。
5、如果等待鎖的優(yōu)先級較高,它會一直占用著CPU的資源,優(yōu)先級低的線程就無法釋放鎖。 在iOS10被蘋果廢棄。
1、,SCHED_OTHER 分時調(diào)度策略,2,SCHED_FIFO實時調(diào)度策略,先到先服務(wù)。一旦占用cpu則一直運行。一直運行直到有更高優(yōu)先級任務(wù)到達(dá)或自己放棄 3,SCHED_RR實時調(diào)度策略,時間片輪轉(zhuǎn)。
2、運行時可以用過pthread_setschedparam()來改變。__schedparam成員是一個struct sched_param結(jié)構(gòu),目前僅有一個sched_priority整型變量表示線程的運行優(yōu)先級。
3、Thread類中 setPriority(int newPriority)thread有三個常量 MAX_PRIORITY 線程可以具有的最高優(yōu)先級。MIN_PRIORITY 線程可以具有的最低優(yōu)先級。NORM_PRIORITY 分配給線程的默認(rèn)優(yōu)先級。
4、Thread類的setPriority(int level)方法設(shè)置線程的優(yōu)先級。優(yōu)先級別從1到10,1是最不重要的,10是最重要的。
5、Cocoa threads: 使用NSThread 或直接從 NSObject 的類方法 performSelectorInBackground:withObject: 來創(chuàng)建一個線程。如果你選擇thread來實現(xiàn)多線程,那么 NSThread 就是guan 方推薦優(yōu)先選用的方式。
6、新線程將繼承創(chuàng)建它的父線程的優(yōu)先級。另外用戶可以通過調(diào)用Thread類的方法setPriority()來修改系統(tǒng)自動設(shè)定的線程優(yōu)先級。
文章標(biāo)題:ios開發(fā)改變線程優(yōu)先級 ios線程的幾種狀態(tài)
網(wǎng)頁路徑:http://jinyejixie.com/article28/dggoecp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站改版、搜索引擎優(yōu)化、網(wǎng)站營銷、用戶體驗、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)