一.概念性問答題 程序員
第一題:線程的基本概念、線程的基本狀態及狀態之間的關係? 數據結構
線程是程序執行流的最小單元。線程的基本狀態包括:新線程態、可運行態、阻塞/非運行態、死亡態。多線程 各狀態之間的關係以下:併發 |
第二題:線程與進程的區別? 函數
線程是指進程內的一個執行單元,也是進程內的可調度實體. 與進程的區別: (1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有本身獨立的地址空間; (2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源 (3)線程是處理器調度的基本單位,但進程不是. 4)兩者都可併發執行. |
第三題:多線程有幾種實現方法,都是什麼? spa
多線程有兩種實現方法:繼承Thread類,實現Runable接口 |
第四題:多線程同步和互斥有幾種實現方法,都是什麼?線程
多線程同步有以下幾種實現方法:繼承 事件、信號量接口 多線程互斥有以下幾種實現方法:進程 臨界區、事件、信號量、互斥量 |
第五題:多線程同步和互斥有何異同,在什麼狀況下分別使用他們?舉例說明。
同步是一種特殊的互斥。當訪問資源量存在前後的順序的時候使用同步,當須要獨佔試訪問資源時使用互斥。 如一個生產者和多個消費者之間。生產者和消費者之間是同步關係;消費者之間是互斥關係。 |
2、選擇題
第一題:
如下多線程對int型變量x的操做,哪幾個不須要進行同步:D
A. x=y; B. x++; C. ++x; D. x=1;
第二題
多線程中棧與堆是公有的仍是私有的: C
A:棧公有, 堆私有
B:棧公有,堆公有
C:棧私有, 堆公有
D:棧私有,堆私有
備註:
一個由C/C++編譯的程序佔用的內存分爲如下幾個部分
一、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數名,局部變量的名等。其操做方式相似於數據結構中的棧。
二、堆區(heap)— 由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式卻是相似於鏈表。
三、全局區(靜態區)(static)—全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另外一塊區域。程序結束後由系統釋放。
四、文字常量區—常量字符串就是放在這裏的,程序結束後由系統釋放 。
五、程序代碼區— 存放函數體的二進制代碼。