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

Chinaunix

標(biāo)題: 百度的測(cè)試題 - 最后一題 [打印本頁(yè)]

作者: newroot_phy    時(shí)間: 2014-07-11 10:06
標(biāo)題: 百度的測(cè)試題 - 最后一題
本帖最后由 newroot_phy 于 2014-07-11 10:07 編輯



百度的測(cè)試題,最后一個(gè),不太明白題意.
作者: 井蛙夏蟲(chóng)    時(shí)間: 2014-07-11 10:15
B和C(帖子長(zhǎng)度不足)
作者: hanxin83    時(shí)間: 2014-07-11 10:21
你鄙視一下面試官, 說(shuō)這題出得有問(wèn)題.
1. 有沒(méi)有講是什么架構(gòu)? X86?還是啥別的玩意?
2. x變量在哪里定義的, 有沒(méi)有指明對(duì)齊顆粒神馬的?
3. 單核還是多核? 匯編用的啥, 把++編譯成INC還是MOV? 賦值編譯成啥匯編了?
作者: hanxin83    時(shí)間: 2014-07-11 10:23
要是回答不上來(lái), 你就告訴他, 都得同步.
然后說(shuō), 其實(shí)不用這么麻煩的, 你用個(gè)嵌入?yún)R編, 加個(gè)lock前綴, 效率比你用臨界區(qū)神馬要高效得多的.
作者: hellioncu    時(shí)間: 2014-07-11 10:40
b和c,包括讀寫兩個(gè)操作
作者: hanzhenlll    時(shí)間: 2014-07-11 11:19
為什么我覺(jué)得ABCD 都需要做同步呢,,,可能是老衲太業(yè)余了吧,老衲一向認(rèn)為 不論是如何操作 單反多線程中有對(duì)公用變量的寫操作 一定需要做同步操作的,
不論是賦值還是自增減,     求教了大神解疑...
作者: super皮波    時(shí)間: 2014-07-11 11:25
x=1和x=y還需要同步?無(wú)論怎么并發(fā),都不影響結(jié)果
回復(fù) 6# hanzhenlll


   
作者: super皮波    時(shí)間: 2014-07-11 11:33
例如x=1
在匯編中分為二步,
1.將寄存器設(shè)置為1
2.將寄存器寫到x對(duì)應(yīng)的內(nèi)存中
你說(shuō)在這兩步中無(wú)論多少個(gè)進(jìn)程在兩行代碼中怎么并發(fā),會(huì)影響到x=1這個(gè)結(jié)果嗎?如果影響到,則需要同步,如果不影響,則不需要同步

x++則不同
在匯編共分三步
1.將x從內(nèi)存讀到寄存器
2.對(duì)寄存器+1
3.寫回到x對(duì)應(yīng)的內(nèi)存中
假如現(xiàn)在有兩個(gè)進(jìn)程,x的初值為1 進(jìn)程a執(zhí)行匯編第二步的時(shí)候,進(jìn)程b正好執(zhí)行到匯編的第一步,這時(shí)候,當(dāng)進(jìn)程a走運(yùn)行完這段代碼的時(shí)候,x=2,當(dāng)進(jìn)程b運(yùn)行完這段代碼的時(shí)候,x=2,這時(shí)候就需要并發(fā),因?yàn)閤的結(jié)果依賴于兩個(gè)進(jìn)程執(zhí)行這段代碼的順序
作者: starwing83    時(shí)間: 2014-07-11 12:36
x=y和x=1顯然是需要屏障的,保證緩存的正確性,這叫不叫同步?

如果叫,那顯然需要同步,如果不叫呢?

沒(méi)說(shuō)明機(jī)器架構(gòu),萬(wàn)一是個(gè)基于棧的機(jī)器,x=1被編譯成了:
push 1
setvalue x
那怎么辦呢?又沒(méi)說(shuō)機(jī)器架構(gòu)。
作者: cobras    時(shí)間: 2014-07-11 12:36
lock前綴在多核的情況下整個(gè)系統(tǒng)的效率不如互斥鎖高。有一本超經(jīng)典的編程書上如是說(shuō)。
作者: starwing83    時(shí)間: 2014-07-11 15:00
回復(fù) 10# cobras


    多核的時(shí)候,lock鎖了總線,會(huì)影響其他核。

不過(guò)互斥鎖也有問(wèn)題,陷入內(nèi)核總不會(huì)太快。

所以要么就futex,要么就上spinlock。spinlock在單核的情況下效率低(但也還好,無(wú)非就是空轉(zhuǎn)用掉時(shí)間片然后導(dǎo)致nice提高),而futex貌似只有Linux有吧?反正就權(quán)衡一下唄。

最靠譜的還是直接用原子操作,很多這方面的庫(kù)的,比如這個(gè):https://github.com/mintomic/mintomic,再比如gcc的__sync系列函數(shù)等等。
作者: windoze    時(shí)間: 2014-07-11 17:13
回復(fù) 11# starwing83

最靠譜的還是直接用原子操作

這在x86上還不是要鎖總線
作者: folklore    時(shí)間: 2014-07-11 17:52
回復(fù) 12# windoze

不鎖總線如何原子?
   
作者: folklore    時(shí)間: 2014-07-11 17:53
回復(fù) 9# starwing83
  1.     push 1
  2. setvalue x
復(fù)制代碼
很不幸,這個(gè)其實(shí)是原子操作~~
雖然它看起來(lái)很不原子。

作者: newroot_phy    時(shí)間: 2014-07-11 20:53
考題在: http://selftest.chinaunix.net/Start_325.html


作者: newroot_phy    時(shí)間: 2014-07-11 20:55
回復(fù) 4# hanxin83


    看來(lái)你認(rèn)為他想考查的是: 臨界區(qū), 我跟你有相同的想法。
作者: newroot_phy    時(shí)間: 2014-07-11 20:56
回復(fù) 2# 井蛙夏蟲(chóng)


    為什么,A和D也都修改了變量X.
作者: newroot_phy    時(shí)間: 2014-07-11 20:57
回復(fù) 5# hellioncu


    給的正確答案是 A, B, C
作者: newroot_phy    時(shí)間: 2014-07-11 20:59
回復(fù) 6# hanzhenlll


所以你認(rèn)為的也是互斥問(wèn)題

如果是這樣,那我們就要分析,哪些操作是原子的,不會(huì)被中斷的,哪些會(huì)被中斷


作者: newroot_phy    時(shí)間: 2014-07-11 21:03
本帖最后由 newroot_phy 于 2014-07-11 21:03 編輯

回復(fù) 7# super皮波


x = y 的匯編指令個(gè)數(shù)(應(yīng)該是) > 1, 是否有材料證明這些語(yǔ)句之間是否會(huì)被中斷呢?
作者: newroot_phy    時(shí)間: 2014-07-11 21:08
回復(fù) 9# starwing83


    這也是讓我搞不清楚的地方,現(xiàn)在多核CPU都有自己的cache, 不做同步很難保證數(shù)據(jù)的一致性,但這么想的話,似乎跟出題人的目的好像不太一樣。
作者: newroot_phy    時(shí)間: 2014-07-11 21:08
回復(fù) 10# cobras


    此貼不考慮效率問(wèn)題。
作者: newroot_phy    時(shí)間: 2014-07-11 21:09
回復(fù) 12# windoze


    可能我沒(méi)太明白你的意思,鎖總線并不能解決一致性的問(wèn)題
作者: newroot_phy    時(shí)間: 2014-07-11 21:10
回復(fù) 14# folklore


    如何得知???
作者: starwing83    時(shí)間: 2014-07-11 21:19
回復(fù) 14# folklore


    額= =顯然我的意思是這是個(gè)無(wú)寄存器的棧機(jī)器,而且恰好棧是公用的(好吧,這種東西根本就不可能多核吧= =)

我重新想了一下,x = y;的確是需要兩條機(jī)器指令,問(wèn)題是,即使是這樣,這個(gè)操作也是原子的= =就算在取得y以后執(zhí)行了任何代碼,但是在執(zhí)行mov之后,仍然能設(shè)置至少y的某個(gè)歷史值。

不過(guò)還有一個(gè)問(wèn)題是這樣的:y和x是不是相關(guān)?如果y的之前值和x相關(guān)(比如y = x + 1),那么這個(gè)語(yǔ)句肯定不會(huì)達(dá)到預(yù)期的效果吧?雖然x = y也仍然是原子的……
作者: windoze    時(shí)間: 2014-07-11 22:51
回復(fù) 23# newroot_phy

x86/x64的LOCK指令會(huì)做cache coherency,能保證cache一致性。
作者: newroot_phy    時(shí)間: 2014-07-12 17:38
回復(fù) 26# windoze


    嵌入式開(kāi)發(fā)中通過(guò)地位來(lái)實(shí)現(xiàn)對(duì)cache/uncache的訪問(wèn), x86/x64上沒(méi)有這么做過(guò)(我不清楚有沒(méi)有),有點(diǎn)聯(lián)系的可能就是volatile關(guān)鍵字,難道是因?yàn)槟闼f(shuō)的原因嗎?
作者: newroot_phy    時(shí)間: 2014-07-12 17:42
回復(fù) 25# starwing83


    類似的問(wèn)題是,如果之前的類似以下的判斷呢
  1. if (x)
  2. {
  3.     x = y
  4. }
  5. else
  6. {
  7.     x = ?????
  8. }
復(fù)制代碼
我在x86上寫程序時(shí)也認(rèn)為32位機(jī)器,x = y 是原子的,但現(xiàn)在的的同事跟我說(shuō),不是原子操作
作者: windoze    時(shí)間: 2014-07-12 21:24
回復(fù) 27# newroot_phy

這都哪兒跟哪兒。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2