C++ std::thread

        C++11提供了std::thread類來表示一個多線程對象。linux

    1,首先介紹一下std::this_thread命名空間:多線程

        (1)std::this_thread::get_id():返回當前線程id函數

        (2)std::this_thread::yield():用戶接口,當前線程主動放棄CPU,調度其餘線程運行。this

        (3)std::this_thread::sleep_for():使得當前線程休眠指定的時間。編碼

        (4)std::this_thread::sleep_util():當前線程休眠,直到指定的絕對時間。atom

    2,std::thread:線程

        (1)構造函數:thread():默認構造函數,構造線程對象,但不包含可運行實例。對象

                                  thread(Fn&&, Args&&...):構造可運行線程對象,並運行Fn(Args&&...),其中Args&&...是Fn的可變參數列表。接口

                                  thread(thread &&x):移動構造函數,將線程對象x的可運行實例移動到調用線程對象中,x再也不可運行。進程

        (2)移動賦值運算符:operator=(thread &&rhs):將右值線程對象rhs的可運行實例移動到調用線程對象中,rhs對象隨即銷燬。

        (3)joinable():若是一個線程是可執行的,就說這個線程是joinable.

                                    例如,使用默認構造函數thread()構造的線程對象是不可運行的,也就是不可joinable。

                                    或者,一個可joinable的線程對象,被move掉可運行實例(如,經過移動賦值運算符)以後,也變成了不可joinable。

                                    再或者,一個線程被detach後,該線程也是不可joinable。

        (4)join():等待回收退出的子線程的殭屍。

        (5)get_id():返回線程對象的id。

        (6)detach():默認狀況下,子線程是附屬在主線程中的,當子線程退出後,會向主線程發送子線程退出信號,主線程收到該信號後,回收子線程殘留的殭屍進程。當子線程調用detach()方法後,該子線程就脫離了主線程的控制,在子線程退出後,子線程資源自動被系統回收(linux中是被init進程回收)。所以,調用了detach的子線程在主線程中是不可joinable的。

        多線程比較簡單,示例再也不列舉。在實際的編碼過程當中,須要重點關注的是線程間資源的同步,能夠使用atomic,mutex,condition variable等鎖來實現資源同步。

相關文章
相關標籤/搜索