自旋鎖和互斥鎖的區(qū)別 你經(jīng)歷過哪些有意思的面試題目?
你經(jīng)歷過哪些有意思的面試題目?你好,我很高興回答你的問題。如果你是某個單位的公職人員,你的親戚朋友經(jīng)常來找你打聽單位的內(nèi)部事務(wù)。如果你有什么事需要你幫忙,你應(yīng)該怎么處理?][真題]愛狗協(xié)會人士反映,最
你經(jīng)歷過哪些有意思的面試題目?
你好,我很高興回答你的問題。
如果你是某個單位的公職人員,你的親戚朋友經(jīng)常來找你打聽單位的內(nèi)部事務(wù)。如果你有什么事需要你幫忙,你應(yīng)該怎么處理?][真題]愛狗協(xié)會人士反映,最近他們用200條狗堵了一輛車,網(wǎng)上批評劉胡蘭、邱少云、瑯琊山五杰等中國抗日英雄的言論很多。你覺得這個怎么樣?]【真題】近年來,釋放積德的行為層出不窮,但最近有人放生老鼠。你怎么認(rèn)為?
面試題還有很多其他意思,小編不會一一列出,如果你有興趣,可以去sd.offcn.com網(wǎng)站學(xué)習(xí)。
如何理解互斥鎖、條件鎖、讀寫鎖以及自旋鎖,它們的區(qū)別在哪?
學(xué)習(xí)復(fù)雜技術(shù)必須通過簡單的生活實(shí)例來理解,加深記憶,否則你永遠(yuǎn)不會掌握
!鎖用于高并發(fā)多線程模型,解決共享資源的安全問題!防止數(shù)據(jù)錯誤
!讓我們用例子來討論這些鎖定機(jī)制:2。條件鎖:也稱為條件變量鎖。當(dāng)兩個人去酒店吃飯,當(dāng)你去廁所,你發(fā)現(xiàn)有人(其他線程正在執(zhí)行)敲門。里面的人說:你先去吃飯,等我,我叫你哈!然后你回去等著?。]有競爭),等他準(zhǔn)備好給你打電話(喚醒線程),你就可以繼續(xù)執(zhí)行了
!4. 旋轉(zhuǎn)鎖:同一個場景,同一個坑!一個人已經(jīng)占了坑,但你很匆忙。你得把褲子拉出來。你該怎么辦?一直敲門(循環(huán)搜索看看你能不能拿到鎖),然后說,我趕時間!直到里面的人厭倦了出來,你才進(jìn)去好好上廁所(執(zhí)行線程)!你一直在敲門(一直在使用CPU資源)
!有定時鎖、輪詢鎖、對象鎖、類鎖、顯示鎖、隱式鎖等。下次再舉個例子吧!不要問我為什么,因?yàn)槟氵€沒有注意到我…
多線程編程的時候,使用無鎖結(jié)構(gòu)會不會比有鎖結(jié)構(gòu)更加快?
這是毫無疑問的,因?yàn)榫€程鎖定是資源密集型的
!那么,如何避免鎖的性能下降呢?
1、從業(yè)務(wù)上避免大量鎖結(jié)構(gòu)
!2. 使用ThreadLocal,可以保證每個線程中的數(shù)據(jù)不會互相污染
!3. 如果讀多寫少,請使用讀寫鎖
!4. 自旋鎖將挑戰(zhàn)CPU,盡管它是一個線程時間很少的鎖
!5. 鎖的粒度應(yīng)該盡可能?。嚎梢栽诜椒ㄖ械逆i不應(yīng)該占用整個方法
自旋鎖鎖)
自旋鎖有點(diǎn)類似于互斥鎖,只是自旋鎖不會導(dǎo)致調(diào)用者睡眠。如果一個自旋鎖被另一個執(zhí)行單元持有,調(diào)用者總是在那里循環(huán),看它是否被持有
自旋鎖的持有者是否已經(jīng)釋放了鎖,因此得名“自旋”。它的功能是解決資源的互斥使用問題。由于自旋鎖不會導(dǎo)致調(diào)用者睡眠,所以自旋鎖的效率比互斥鎖高很多。雖然它的效率高于互斥鎖,但它也有一些缺點(diǎn):1。自旋鎖總是占用CPU。它運(yùn)行所有的時間-自旋沒有得到鎖,所以它占用CPU。如果不能在短時間內(nèi)獲得鎖,無疑會降低CPU效率。
2. 使用自旋鎖時,可能會導(dǎo)致死鎖。遞歸調(diào)用時,可能導(dǎo)致死鎖。調(diào)用其他一些函數(shù)也可能導(dǎo)致死鎖,例如copyuutouuser()、copyufromuuser()、kmalloc()等,因此使用自旋鎖要謹(jǐn)慎。只有當(dāng)內(nèi)核是搶占式或SMP時,才真正需要自旋鎖。在單CPU非搶占式內(nèi)核中,自旋鎖的操作為空。旋轉(zhuǎn)鎖適用于鎖用戶在短時間內(nèi)保持鎖。
互斥:線程將切換上下文,搶占CPU并將信號從休眠發(fā)送到運(yùn)行。
自旋鎖:線程總是在運(yùn)行(lock> unlock),死循環(huán)檢測鎖標(biāo)志位,機(jī)制并不復(fù)雜。
互斥鎖是一種睡眠等待鎖。例如,在雙核機(jī)器上,有兩個線程(線程a和線程b),分別在core0和
core1上運(yùn)行。假設(shè)線程a希望通過pthreadmutexLock操作來獲得鎖的關(guān)鍵區(qū)域,此時鎖由線程B持有,那么線程a將被阻塞