當(dāng)多個(gè)線程同時(shí)訪問(wèn)一條數(shù)據(jù)的時(shí)候未斑,會(huì)發(fā)生該數(shù)據(jù)產(chǎn)生數(shù)據(jù)的獲取與操作發(fā)生不可預(yù)知的后果,解決這種多條線程訪問(wèn)同一條數(shù)據(jù)的方法是添加鎖适掰。
在iOS中有兩種添加鎖的方式颂碧,這種鎖也叫互斥鎖,指在A線程訪問(wèn)該數(shù)據(jù)的時(shí)候类浪,B線程不能夠去訪問(wèn)該數(shù)據(jù)载城,有@synchornize、NSLock 兩種方式费就。
@synchornize比較簡(jiǎn)單诉瓦,直接使用即可我們來(lái)看下代碼,有一種場(chǎng)景力细,在用戶進(jìn)行售票的時(shí)候睬澡,有三個(gè)售貨員同時(shí)賣票,總共有100張票眠蚂,三個(gè)售票員代表了三條線程煞聪,100張票代表了需要操作以及訪問(wèn)的對(duì)象。使用@synchornize包含了需要多條線程訪問(wèn)的代碼段即可逝慧。
NSLock為蘋(píng)果提供的互斥鎖的對(duì)象類型昔脯,以下代碼打開(kāi)注釋就可以達(dá)到多條線程操作同一條數(shù)據(jù)時(shí),數(shù)據(jù)的讀寫(xiě)順序在多線程的情況下是可控的笛臣,是順序進(jìn)行讀寫(xiě)操作的云稚。