標籤:全域 hid adp 問題 lob wol windows編程 logs dao
1. 什麼是安全執行緒?(2012年5月百度實習生面試)
如果多線程的程式運行結果是可預期的,而且與單線程的程式運行結果一樣,那麼說明是“安全執行緒”的。
a.線程的概念、線程的基本狀態及狀態之間的關係
另外,這個網址裡面講作業系統的知識倒是挺詳實的,還有另外一種解釋線程概念
b.多線程的幾種實現方法分別是什嗎?
這個貌似在java面試中會出現,我是專註於c++的,無視掉,但是不得不說,秒殺多線程面試題系列真心是個好總結
c.多線程同步與互斥有幾種實現方法?都是什嗎?(C++)
臨界區(CS:critical section)、事件(Event)、互斥量(Mutex)、訊號量(semaphores),需要注意的是,臨界區是效率最高的,因為基本不需要其 他的開銷,二核心對象涉及到使用者態和核心態的切換,開銷較大,另外,關鍵段、互斥量具有線程所有權的概念,因此只可以用於線程之間互斥,而不能用到 同步中。只有互斥量能完美解決進程意外終止所造成的“遺棄問題”。
d.多線程同步和互斥有何異同,在什麼情況下分別使用他們?舉例說明
所謂同步,表示有先有後,比較正式的解釋是“線程同步是指線程之間所具有的一種制約關係,一個線程的執行依賴另一個線程的訊息,當它沒有得到另一個 線程的訊息時應等待,直到訊息到達時才被喚醒。”所謂互斥,比較正式的說明是“線程互斥是指對於共用的進程系統資源,在各單個線程訪問時的排它性。當 有若干個線程都要使用某一共用資源時,任何時刻最多隻允許一個線程去使用,其它要使用該資源的線程必須等待,直到佔用資源者釋放該資源。線程互斥 可以看成是一種特殊的線程同步。”表示不能同時訪問,也是個順序問題,所以互斥是一種特殊的同步操作。
舉個例子,設有一個全域變數global,為了保證安全執行緒,我們規定只有當主線程修改了global之後下一個子線程才能訪問global,這就需要同步主線程與子 線程,可用關鍵段實現。當一個子線程訪問global的時候另一個線程不能訪問global,那麼就需要互斥。
e.以下多線程對int型變數x的操作,哪幾個需要進行同步:
A. x=y; B. x++; C. ++x; D. x=1;
答案是ABC,顯然,y的寫入與x讀y要同步,x++和++x都要知道x之前的值,所以也要同步。
f.多線程中棧與堆是公有的還是私人的
A:棧公有, 堆私人
B:棧公有,堆公有
C:棧私人, 堆公有
D:棧私人,堆私人
答案是C,棧一般存放局部變數,而程式員一般自己申請和釋放堆中的資料(詳見堆與棧的區別)。
g.在Windows編程中互斥量與臨界區比較類似,請分析一下二者的主要區別。
臨界區、互斥量、號誌、事件的區別總結
針對這個題目的話,答案主要有以下幾點:
1)互斥量是核心對象,所以它比臨界區更加耗費資源,但是它可以命名,因此可以被其它進程訪問
2)從目的是來說,臨界區是通過對多線程的序列化來訪問公用資源或一段代碼,速度快,適合控制資料訪問。
互斥量是為協調共同對一個共用資源的單獨訪問而設計的。
h.一個全域變數tally,兩個線程並發執行(程式碼片段都是ThreadProc),問兩個線程都結束後,tally取值範圍。
原博地址:http://www.cnblogs.com/wuchanming/p/3992395.html
秒殺多線程系列中的題目