亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2114 | 回復(fù): 5
打印 上一主題 下一主題

關(guān)于自旋鎖的一個(gè)很弱的問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-04-01 09:52 |只看該作者 |倒序?yàn)g覽
線程持有自旋鎖時(shí)為什么不能休眠呢

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-04-01 11:23 |只看該作者
如果另外一個(gè)線程需要該鎖,就可能會(huì)死鎖(至少是性能下降,不知道什么時(shí)候休眠的線程能被再次調(diào)度)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-04-01 11:56 |只看該作者
lock            lock
...               ...   
                        / lock
           =>         \ unlock
...               ...   
unlock        unlock
假設(shè)線程被搶占或者中斷了,無(wú)論是哪種方式,都等價(jià)于在線程中插入了另外一個(gè)執(zhí)行路徑,如果在該執(zhí)行路徑上會(huì)競(jìng)爭(zhēng)相同的自旋鎖,死鎖就發(fā)生了,如果不競(jìng)爭(zhēng)相同的自旋鎖,死鎖還是不會(huì)發(fā)生的,這樣理解對(duì)吧

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-04-01 12:55 |只看該作者
spin lock基本上就是一個(gè)死循環(huán)不停地測(cè)試某個(gè)值有沒(méi)有變成預(yù)期的吧,所謂得到其實(shí)就是改了某個(gè)值而已,在改回去之后如果休眠了任何其它進(jìn)程(不管是本CPU還是其它的)再想得到這個(gè)spin lock就會(huì)在內(nèi)核態(tài)忙等了,多數(shù)會(huì)導(dǎo)致死機(jī)。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-04-01 16:30 |只看該作者
自旋鎖不休眠,信號(hào)量用來(lái)休眠

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-04-11 21:09 |只看該作者
原帖由 yushang 于 2009-4-1 09:52 發(fā)表
線程持有自旋鎖時(shí)為什么不能休眠呢


如果線程能休眠,那為什么不用信號(hào)量呢?
自旋鎖一般用于不能發(fā)生休眠(不會(huì)產(chǎn)生進(jìn)程上下文切換)的內(nèi)核路徑,比如中斷。



原帖由 yushang 于 2009-4-1 11:56 發(fā)表
lock            lock
...               ...   
                        / lock
           =>         \ unlock
...               ...   
unlock        unlock
假設(shè)線程被搶占或者中斷了,無(wú)論是哪種 ...

如果使用了自旋鎖,線程是不會(huì)發(fā)生內(nèi)核搶占的,可以看下自旋鎖的實(shí)現(xiàn):
在非SMP(UP)系統(tǒng)中:

  1. #define spin_lock(lock)                        _spin_lock(lock)

  2. #define _spin_lock(lock)                        __LOCK(lock)

  3. #define __LOCK(lock) \
  4.   do { preempt_disable(); __acquire(lock); (void)(lock); } while (0)

  5. preempt_disable()禁止了內(nèi)核搶占
復(fù)制代碼


在SMP中

  1. #define spin_lock(lock)                        _spin_lock(lock)

  2. void __lockfunc _spin_lock(spinlock_t *lock)
  3. {
  4.         preempt_disable();
  5.         _raw_spin_lock(lock);
  6. }

  7. preempt_disable()禁止了內(nèi)核搶占
復(fù)制代碼


如果你怕中斷處理程序同時(shí)訪問(wèn)被中斷的進(jìn)程正在持有的自旋鎖,可以調(diào)用這樣的函數(shù):

  1. spin_lock_irqsave(lock, flags);

  2. spin_unlock_irqrestore(lock, flags) ;
復(fù)制代碼

這樣就萬(wàn)無(wú)一失了。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP