示波器的使用教程 多線程編程的時(shí)候,使用無鎖結(jié)構(gòu)會(huì)不會(huì)比有鎖結(jié)構(gòu)更加快?
多線程編程的時(shí)候,使用無鎖結(jié)構(gòu)會(huì)不會(huì)比有鎖結(jié)構(gòu)更加快?這是毫無疑問的,因?yàn)榫€程鎖定是資源密集型的!那么,如何避免鎖的性能下降呢?1、從業(yè)務(wù)上避免大量鎖結(jié)構(gòu)!2. 使用ThreadLocal,可以保證每
多線程編程的時(shí)候,使用無鎖結(jié)構(gòu)會(huì)不會(huì)比有鎖結(jié)構(gòu)更加快?
這是毫無疑問的,因?yàn)榫€程鎖定是資源密集型的
!那么,如何避免鎖的性能下降呢?
1、從業(yè)務(wù)上避免大量鎖結(jié)構(gòu)
!2. 使用ThreadLocal,可以保證每個(gè)線程中的數(shù)據(jù)不會(huì)互相污染
!3. 如果讀多寫少,請使用讀寫鎖
!4. 自旋鎖將挑戰(zhàn)CPU,盡管它是一個(gè)線程時(shí)間很少的鎖
!mutex mutex僅用于保護(hù)關(guān)鍵區(qū)域(訪問共享資源)中的代碼,但不用于鎖之間的同步。也就是說,在線程釋放互斥鎖之后,它可能會(huì)立即獲取相同的鎖,而不管其他線程是否在等待互斥鎖。信號(hào)量不僅可以保護(hù)關(guān)鍵區(qū)域,還可以用于鎖同步。也就是說,在線程釋放信號(hào)量之后,它將確保等待信號(hào)量的線程首先執(zhí)行,而不是立即獲取相同的信號(hào)量。如果兩個(gè)線程希望通過鎖輸出1、2、1、2、1、2的序列,則應(yīng)使用信號(hào)量,而互斥可能導(dǎo)致1、1、1、2、2、11。