闡述C++中多任務處理的相關概念
概述
- 概念
- 電腦同時運行多個程式的能力,多任務處理的方法是:運行第一個程式的一段代碼,保存工作環境;再運行第二個程式的一段代碼,保存工作環境;……恢復第一個程式的工作環境,執行第一個程式的下一段代碼……程式的局部性原理,是多任務處理最重要的基礎。
- 多任務處理的類型
- 基於進程的多任務處理
- 程式之間的併發執行,由操作系統完成調度任務
- 基於線程的多任務處理
- 程式內部的併發執行,用戶(系統的用戶)可以調度任務
- 基於進程的多任務處理
- 關於
- 若你想瞭解更多關於多任務處理的知識,如:任務調度,同步非同步等,請閱讀《電腦操作系統》一書。
多線程
- 多線程編程
- C++ 中的多線程編程是基於 POSIX(Portable Operating System Interface Of UNIX) Threads 或 Pthreads 提供的 API
- 註意
- 線程可以理解為輕量級的進程,一個進程中的資源被所有的子線程共用,線程之間是同等的
- 線程操作
創建線程
int pthread_create(pthread_t * __restrict, const pthread_attr_t * __restrict, void *(*)(void *), void * __restrict);
- 第一個參數:一個不透明的、唯一的標識符,用於表示常式返回的新線程
- 第二個參數:一個不透明的屬性對象,可以被用來設置線程屬性。可以指定線程屬性對象,也可以使用預設值 NULL
- 第三個參數:C++ 常式,一旦線程被創建就會執行
- 第四個參數:一個可能傳遞給第三個參數(C++ 常式)的參數。必須通過把引用作為指針強制轉換為 void 類型進行傳遞。如果沒有傳遞參數,則使用 NULL。可以接受任何類型的參數,因為類型是 void *
- 終止線程
- 隱式終止
- 在 main 函數終止時,未顯示終止的線程會自動終止
- 顯示終止
使用 pthread_exit 函數終止
void pthread_exit(void *)
- 隱式終止
- 連接和分離線程
連接(實現線程間同步的一種方式)
int pthread_join(pthread_t , void **)
- 創建線程時,需要明確指定線程是否可連接。可移動設備中,並不是所有創建的線程預設都是可連接的。為了明確指定創建一個線程的連接性和分離性,創建一個線程可分為以下四個步驟:
- 聲明一個pthread_attr_t數據類型的pthread屬性變數
- 使用pthread_init()初始化屬性變數
- 使用pthread_attr_setdetachstate()設置屬性為分離狀態
- 當使用完成後,使用pthread_attr_destroy()釋放屬性用到的資源
- pthread_join()將掛起調用線程的執行直到目標線程終止,除非目標線程已經終止了
- 創建線程時,需要明確指定線程是否可連接。可移動設備中,並不是所有創建的線程預設都是可連接的。為了明確指定創建一個線程的連接性和分離性,創建一個線程可分為以下四個步驟:
分離
int pthread_detach(pthread_t)
- 通常不建議調用 pthread_detach() 去分離一個線程,只需要在創建線程的時候,指定線程為可分離即可