線程與進程筆記

C++筆記(面試總結 四)

1.進程間的五種通信方式
1.管道(無名管道)
特點:半雙工,只能按照一個方向傳輸,只能在具有血緣關係的進程之間流動,只存於內存中。
2.命名管道(FIFO)
特點:在無關的進程之間進行通信,存在於文件系統中
3.消息隊列
消息的鏈接表,存放在內核中。一個消息隊列有一個標識符來標記。
消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優先級。

消息隊列獨立於發送與接收進程。進程終止時,消息隊列及其內容並不會被刪除。

消息隊列可以實現消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取。
4.共享內存
指兩個或多個進程同時佔用一塊存儲區。最快的一種方式。
需要和信號量一起使用來保證進程之間的同步。

2.線程同步和線程互斥的區別
線程同步是指線程之間所具有的一種制約關係,一個線程的執行依賴另一個線程的消息,當它沒有得到另一個線程的消息時應等待,直到消息到達時才被喚醒。
線程互斥是指對於共享的進程系統資源,在各單個線程訪問時的排它性。當有若干個線程都要使用某一共享資源時,任何時刻最多隻允許一個線程去使用,其它要使用該資源的線程必須等待,直到佔用資源者釋放該資源。線程互斥可以看成是一種特殊的線程同步(下文統稱爲同步)。

3.虛析構函數

通過基類的指針來刪除派生類的對象時,基類的析構函數應該是虛的,否則其刪除效果將無法實現。
在公有繼承中,基類對派生類及其對象的操作,只能影響到那些從基類繼承下來的成員。
如果想要用基類對非繼承成員進行操作,則要把基類的這個操作(函數)定義爲虛函數。
那麼,析構函數自然也應該如此:如果它想析構子類中的重新定義或新的成員及對象,當然也應該聲明爲虛的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章