多執行緒 互斥鎖解決買票問題

2021-07-10 15:21:14 字數 1473 閱讀 4314

在這個**介紹了多執行緒的安全隱患

買票問題

//總票數

@property(nonatomic,assign)int tickets;

@end

-(void)touchesbegan:(nsset*)touches withevent:(uievent *)event

/*

加鎖,互斥鎖

加鎖,鎖定的**盡量少

加鎖範圍內的**,同意四件只執行乙個執行緒執行

互斥鎖的引數,任何繼承nsobject *物件都可以,

***這個鎖,所以得執行緒都能訪問到,而且是所有執行緒訪問的是同乙個鎖

*/-(void)saletickes

else}}

}

為什麼在開發中不常使用互斥鎖呢

一般買票的時候票數是通過伺服器訪問資料庫查詢的來的

除非你把互斥鎖加到伺服器上

就是你在手機應用上加鎖互斥鎖帶其他通過安卓手機或者**訪問的沒有互斥鎖

所以蘋果建議我們使用「自旋鎖」

@inte***ce

viewcontroller ()

//總票數

@property(nonatomic,assign)int tickets;

@property(atomic,strong)nsobject *obj;

// nonatomic 非原子屬性

//atomic 原子屬性預設屬性

//原子屬性就是針對多執行緒設計的,原子屬性實現單(執行緒)寫多(執行緒)讀

//因為寫的安全級別有錢更高,讀的要求低一點,可以多度幾次保證正確性

@end

@synthesize obj=_obj;

-(nsobject *)obj

/* 執行緒安全的概念

就是在多個執行緒同時執行的時候,能夠保證資源的資訊的準確性

「ui執行緒---主線程」

uikit絕大部分的類,都不是「執行緒安全」的

怎麼解決這個執行緒不安全的問題?

蘋果約定,所以程式的更新ui都在主線程進行 所以得ui都在主線程更新這就不會同時改變乙個資源

在主線程更新ui,的好處

1.只在主線程更新ui,一就不會出現多執行緒同時改變同乙個ui控制項

2.主線程的優先順序最高,也就意味著ui的更新優先順序高,會讓使用者感覺和流暢

*///atomic情況下,只要寫了set方法,getter也的重寫

-(void)setobj:(nsobject *)obj

}

多執行緒 互斥鎖

include include include handle mutex null srwlock g lock 改變乙個變數的時候需要鎖定 int num 6400000 在讀期間,值一直在變化,沒有鎖定。dword winapi reada void p i 使用acquiresrwlocksh...

多執行緒 互斥鎖

package com.yys.thread created by yys on 2017 9 25.兩個執行緒執行 t1如果能拿到02物件則t1執行緒執行完畢 t2如果能拿到o1物件則t2執行緒執行完畢 現在兩個執行緒分別鎖定了對方需要的物件 造成執行緒死鎖 public class testde...

多執行緒 互斥鎖

使用reentrantlock類的lock和unlock方法進行同步通訊 使用reentrantlock類的newcondition方法可以獲取condition物件,需要等待的時候使用conditionde await方法,喚醒的時候用signal方法,不同的執行緒使用不同的condition,這...