1. 程式人生 > >C/C++面試題

C/C++面試題

新華三筆試

    1、樹 葉子節點     2、排序函式 時間複雜度 空間複雜度     3、哈夫曼樹 哈夫曼編碼     4、Linux 定時器     5、真命題     6、公共最長子串

排序演算法

 程序和執行緒的區別

根本區別:程序是作業系統資源分配的基本單位,而執行緒是任務排程和執行的基本單位

在開銷方面:每個程序都有獨立的程式碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;執行緒可以看做輕量級的程序,同一類執行緒共享程式碼和資料空間,每個執行緒都有自己獨立的執行棧和程式計數器(PC),執行緒之間切換的開銷小。

所處環境:在作業系統中能同時執行多個程序(程式);而在同一個程序(程式)中有多個執行緒同時執行(通過CPU排程,在每個時間片中只有一個執行緒執行)

記憶體分配方面:系統在執行的時候會為每個程序分配不同的記憶體空間;而對執行緒而言,除了CPU外,系統不會為執行緒分配記憶體(執行緒所使用的資源來自其所屬程序的資源),執行緒組之間只能共享資源。

包含關係:沒有執行緒的程序可以看做是單執行緒的,如果一個程序內有多個執行緒,則執行過程不是一條線的,而是多條線(執行緒)共同完成的;執行緒是程序的一部分,所以執行緒也被稱為輕權程序或者輕量級程序。

同一程序下執行緒可以共享

執行緒共享的內容包括:

  1. 程序程式碼段
  2. 程序的公有資料(利用這些共享的資料,執行緒很容易的實現相互之間的通訊)、
  3. 程序開啟的檔案描述符、
  4. 訊號的處理器、
  5. 程序的當前目錄和
  6. 程序使用者ID與程序組ID   

    執行緒獨有的內容包括:

  1. 執行緒ID
  2. 暫存器組的值
  3. 執行緒的堆疊
  4. 錯誤返回碼
  5. 執行緒的訊號遮蔽碼