以下多執行緒對int型變數x的操作,哪幾個不需要進行同步:
a. x=y; b. x++; c. ++x; d. x=1;
答案:abc
a:在x86上它包含兩個操作:讀取y至暫存器,再把該值寫入x。讀y的值這個操作本身是原子的,把值寫入x也是原子的,但是兩者合起來不是原子操作,因為它不是不可再分的操作,所以需要進行同步
b、c:x++和++x這樣的操作在多執行緒環境下是需要同步的。因為x86會按三條指令的形式來處理這種語句:從記憶體中讀x的值到暫存器中,對暫存器加1,再把新值寫回x 所處的記憶體位址
d:x=1是原子操作,不可再分
因為x是int型別,32位cpu上int佔32位,在x86上由硬體直接提供了原子性支援。實際上不管有多少個執行緒同時執行類似x=1這樣的賦值語句,x的值最終還是被賦的值(而不會出現例如某個執行緒只更新了x的低16位然後被阻塞,另乙個執行緒緊接著又更新了x的低24位然後又被阻塞,從而出現x的值被損壞了的情況)。
第二題(阿里巴巴筆試題)
多執行緒中棧與堆是公有的還是私有的
a:棧公有, 堆私有
b:棧公有,堆公有
c:棧私有, 堆公有
d:棧私有,堆私有
答案:c,每個執行緒都有自己的棧,多個執行緒共有堆
第一題(台灣某防毒軟體公司面試題):
在windows程式設計中互斥量與臨界區比較類似,請分析一下二者的主要區別。
第二題:
乙個全域性變數tally,兩個執行緒併發執行(**段都是threadproc),問兩個執行緒都結束後,tally取值範圍。
inttally = 0;//glable
voidthreadproc()
for(inti = 1; i <= 50; i++)
tally += 1;
tally += 1 分為三條指令:
(1)tally記憶體進入暫存器;(2)暫存器加1;(3)暫存器資料放回記憶體tally;
最壞的情況:就是執行緒一讀tally,執行緒二也讀tally,執行緒一暫存器加一,執行緒二暫存器加一,執行緒一放回tally,執行緒二放回tally,這種情況雖然二個執行緒都對tally加1,但顯然只加了一次。所以到最後只加50次。
最好的情況:就是執行緒一的for結束,再到執行緒二的for,一共執行100次。
第三題(某培訓機構的練習題):
子執行緒迴圈 10 次,接著主線程迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主線程又迴圈 100 次,如此迴圈50次,試寫出**。
第四題(迅雷筆試題):
編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a、b、c,每個執行緒將自己的id在螢幕上列印10遍,要求輸出結果必須按abc的順序顯示;如:abcabc….依次遞推。
第五題(google面試題)
有四個執行緒1、2、3、4。執行緒1的功能就是輸出1,執行緒2的功能就是輸出2,以此類推.........現在有四個檔案abcd。初始都為空。現要讓四個檔案呈如下格式:
a:1 2 3 4 1 2....
b:2 3 4 1 2 3....
c:3 4 1 2 3 4....
d:4 1 2 3 4 1....
請設計程式。
下面的第六題與第七題也是在考研中或是程式設計師和軟體設計師認證考試中的熱門試題。
第六題生產者消費者問題
這是乙個非常經典的多執行緒題目,題目大意如下:有乙個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不允許消費者到乙個空的緩衝區中取產品,也不允許生產者向乙個已經裝滿產品且尚未被取走的緩衝區中投放產品。
第七題讀者寫者問題
這也是乙個非常經典的多執行緒題目,題目大意如下:有乙個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者讀時寫者也不能寫。
多執行緒筆試面試題彙總
系列前言 法 相信你也能對多執行緒揮灑自如,在筆試面試中順利的秒殺多執行緒試題。華麗的分割線 下面就來看看這三類題目吧。第一題 執行緒的基本概念 執行緒的基本狀態及狀態之間的關係?第二題 執行緒與程序的區別?這個題目問到的概率相當大,計算機專業考研中也常常考到。要想全部答出比較難。第三題 多執行緒有...
多執行緒筆試面試題彙總
系列前言 法 相信你也能對多執行緒揮灑自如,在筆試面試中順利的秒殺多執行緒試題。華麗的分割線 下面就來看看這三類題目吧。第一題 執行緒的基本概念 執行緒的基本狀態及狀態之間的關係?第二題 執行緒與程序的區別?這個題目問到的概率相當大,計算機專業考研中也常常考到。要想全部答出比較難。第三題 多執行緒有...
多執行緒16 多執行緒筆試面試題彙總
下面就來看看這三類題目吧。第一題 執行緒的基本概念 執行緒的基本狀態及狀態之間的關係?第二題 執行緒與程序的區別?這個題目問到的概率相當大,計算機專業考研中也常常考到。要想全部答出比較難。第三題 多執行緒有幾種實現方法,都是什麼?第四題 多執行緒同步和互斥有幾種實現方法,都是什麼?我在參加2011年...