併發程式設計2

2021-10-17 20:50:31 字數 589 閱讀 6540

2.自旋鎖(spinlock)

3.訊號量

2.synchronizer.cpp中對應的slow_enter

3.鎖膨脹—inflate也在synchronizer.cpp中

因此synchronized不是自旋鎖

2.什麼時候變成重量級鎖,是因為鎖膨脹,是可逆的,當乙個執行緒持有鎖,當另乙個也來獲取鎖時,此時鎖會膨脹,變為重量級鎖。

3.線上很多**,很多時候沒有併發,所有直接用synchronized是效能很差的,此時只是偏向鎖,也就是說高併發情況下才會變成重量級鎖,所以高併發情況下,盡量避免用鎖,通過mq、copyonwrite、解決,對於超賣這種特殊情況則需要使用synchronized,

4.mutex為什麼是重量鎖?mutex互斥特點是拿不到鎖就會sleep,呼叫sleep()會進入核心態,sleep是一種核心操作,因為發生了一次系統呼叫,jdk1.6之前是重量級鎖,所以睡眠執行緒進入了核心態,當執行緒喚醒,它被喚醒,又從核心態切換為使用者態。reentrantlock中沒有呼叫sleep,只用了cas,而cas不是核心操作,所以reentrantlock是輕量級鎖。

什麼是核心態?執行緒的本質 ->jvm ->核心執行緒(一對一模型)

併發程式設計(2)

作用 private volatile int a 0 強制執行緒到共享記憶體中讀取資料,而不是從執行緒工作中讀取,從而使變數在多個執行緒間可見。volatile無法保證原子性,volatile是輕量級的同步,效能比synchronized強很多,但是只是保證了效能的可見性,並不能替代synchro...

併發程式設計2

一台計算機上面執行著很多程序,那麼計算機是如何區分並管理這些程序服務端的呢?計算機會給每乙個執行的程序分配乙個pid號 如何檢視 windows電腦 進入cmd輸入tasklist即可檢視 tasklist findstr pid檢視具體的程序 mac電腦 進入終端之後輸入ps aux ps aux...

併發程式設計2

守護程序 守護程序也是乙個程序,可以守護著另乙個程序 乙個程序a設定為b的守護程序,當b結束時a會立刻結束自己不管任務是否執行完畢 將程序的daemon屬性設定為true時這個程序變成了守護程序,設定daemon屬性時必須在開始程序之前 程序安全 使用lock來例項化產生一把鎖,但是要保證每乙個程序...