亚洲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 編輯
1.jpg
(131.4 KB, 下載次數(shù): 49)
下載附件
2014-07-11 10:05 上傳
百度的測(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
push 1
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)題是,如果之前的類似以下的判斷呢
if (x)
{
x = y
}
else
{
x = ?????
}
復(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