1. 程式人生 > >c++11多執行緒程式設計-程序與執行緒

c++11多執行緒程式設計-程序與執行緒

概念:

       程序:第一,程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text 

region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域

儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。

       執行緒:有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的

執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。另外,執行緒是程序中的一個實體,是被系統

獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可

與同屬一個程序的其它執行緒共享程序所擁有的全部資源。

程序與執行緒的區別:程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的地

址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行

路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序

死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但

對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

1) 簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒.

2) 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。

3) 另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

4) 執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

5) 從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

下邊用c++11的程式碼來給大家演示一下如何寫多執行緒,關於c++11的大部分內容是從boost庫中抽出來的,如果你熟悉boost的話,那真是極好的!

分散式下是不能用多執行緒的!只能用多程序

下邊看一個很簡單的例子,程式碼是在vs2015上實現的

#include<iostream>
#include<thread> //thread庫
using namespace std; //圖方便=。=


void function_1()
{
cout << "hello_Thread" << endl;
}


int main()
{
thread t1(function_1);
t1.join(); //一個執行緒必須join或者detach
//t1.detach();
return 0;
}

程式碼輸出

hello_Thread

如果程式碼這樣寫的話

#include<iostream>
#include<thread> //thread庫
using namespace std; //圖方便=。=


void function_1()
{
cout << "hello_Thread" << endl;
}


int main()
{
thread t1(function_1);
//t1.join(); //一個執行緒必須join或者detach
t1.detach();
return 0;
}

這樣程式碼是不會輸出任何東西的,因為主執行緒走的太快,子執行緒還來不及走,主執行緒就已經走完了,所以

是不會輸出任何東西的。

執行緒有兩種狀態,joinable或者detachable。一個執行緒被建立後,最終一定要呼叫join或者detach,以保證

最後執行緒的資源會得到回收。對於一個joinable的執行緒,join它後要等到它執行結束,呼叫執行緒才能繼續向

前執行。如果呼叫執行緒既希望被建立的執行緒資源回收,又不會被阻塞在join,那怎麼辦呢,呼叫detach,讓

其自動回收。

簡單的來講一個子執行緒join()後,主執行緒必須要等到子執行緒結束之後才能繼續走,而detach則是子執行緒自

己釋放,主執行緒不用管。這是主要的區別。執行緒建立之後一定要join或者detach!

一個執行緒在detach()之後是不能再join()的,否則的話執行會報錯的。

這是最簡單的多執行緒的例子。

相關推薦

c++11執行程式設計-程序執行

概念:        程序:第一,程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text  region)、資料區域(data region)和堆疊(stack

javaSE高階開發執行——1 程序執行 and 2 執行的實現

一、程序與執行緒 1.程序的概念 執行緒隸屬於某個程序,程序是一個程式的執行週期,但是我們的執行緒是執行程序中的某個任務 所以如果程序不存在的話,那麼執行緒自然也就不會存在了。 我們應該時刻將執行緒和任務對等起來,執行一個程式啟動一個程序。這樣就可以提升沃恩程式的執行

Java執行1:程序執行

1.什麼是程序? 程序是作業系統結構的基礎,是一次程式的執行,是系統進行資源分配和排程的一個獨立單位。 這個解釋有點懵了。簡單來講就是一個正在作業系統中的執行的exe程式就是一個程序。 2.什麼是執行緒? 執行緒可以理解為是在程序中獨立執行的子任務。

C#執行程式設計(一)程序執行

一、 程序         簡單來說,程序是對資源的抽象,是資源的容器,在傳統作業系統中,程序是資源分配的基本單位,而且是執行的基本單位,程序支援併發執行,因為每個程序有獨立的資料,獨立的堆疊空間。一個程式想要併發執行,開多個程序即可。

c++11執行執行

最近需要開發一個高效能運算庫,涉及到c++多執行緒的應用,上次做類似的事情已經是4年多以前了,印象中還頗有些麻煩。悔當初做了就算了,也沒想著留點記錄什麼的。這次又研究了一番,發現用上c++11特性之後,現在已經比較簡單了,在此記錄一下。   最簡單的多執行緒情況,不涉及公共變數,各個執行緒之間獨

C++ 11 執行下std::unique_lockstd::lock_guard的區別和用法

這裡主要介紹std::unique_lock與std::lock_guard的區別用法 先說簡單的 一、std::lock_guard的用法 std::lock_guard其實就是簡單的RAII封裝,在建構函式中進行加鎖,解構函式中進行解鎖,這樣可以保證函式退出時,鎖一定被釋放。 簡單來說,就是防止開

C++11執行程式設計 緒論及總結

C++11多執行緒程式設計 這一系列文章是從 https://thispointer.com/c11-multithreading-tutorial-series/ 轉過來的, 本來想翻譯一下, 但看了些內容, 用詞都不難, 讀英文沒有太大難度, 翻譯過來反而怕用詞不準畫蛇添

C++11執行程式設計 第十章: 使用packaged_task優雅的讓同步函式非同步執行

C++11 Multithreading – Part 10: packaged_task<> Example and Tutorial Varun July 2, 2017 C++11 Multithreading – Part 10: packaged_tas

C++11執行程式設計 第九章: std::async 更更優雅的寫執行

C++11 Multithreading – Part 9: std::async Tutorial & Example Varun May 5, 2017 C++11 Multithreading – Part 9: std::async Tutorial &

C++11執行程式設計 第八章: 使用 std::future std::promise 更優雅的獲取執行返回值

C++11 Multithreading – Part 8: std::future , std::promise and Returning values from Thread Varun June 20, 2015 C++11 Multithreading – Part

C++11執行程式設計 第七章: 條件變數及其使用方法

C++11 Multithreading – Part 7: Condition Variables Explained Varun June 2, 2015 C++11 Multithreading – Part 7: Condition Variables Explain

C++11執行程式設計 第五章: 使用鎖來解決竟態條件

C++11 Multithreading – Part 5: Using mutex to fix Race Conditions Varun February 22, 2015 C++11 Multithreading – Part 5: Using mutex to fi

C++11執行程式設計 第四章: 共享資料和競態條件

C++11 Multithreading – Part 4: Data Sharing and Race Conditions Varun February 21, 2015C++11 Multithreading – Part 4: Data Sharing and Race Con

C++11執行程式設計 第三章: 如何向執行傳參

C++11 Multithreading – Part 3: Carefully Pass Arguments to Threads Varun January 22, 2015 C++11 Multithreading – Part 3: Carefully Pass Ar

C++11執行程式設計 第二章: join 和 detach 執行

  C++11 Multithreading – Part 2: Joining and Detaching Threads Varun January 21, 2015 C++11 Multithreading – Part 2: Joining and De

C++11執行程式設計 第六章: 執行之間的事件處理

C++11 Multithreading – Part 6: Need of Event Handling Varun June 1, 2015 C++11 Multithreading – Part 6: Need of Event Handling2018-08-18T1

C++11 執行程式設計使用例項

最新研究下C++11中執行緒的知識,基本內容如下: 1、C++11中建立執行緒的幾種方式 在C11中,我們可以通過建立std::thread類的物件來建立額外的執行緒。每個thread物件可以跟具體的某個執行緒關聯,從而達到多執行緒併發的目的。  必須 #include 

C++11執行程式設計系列(二)實戰

C++11 新標準中引入了多個頭檔案來支援多執行緒程式設計,他們分別是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。 <

C++11執行程式設計基礎入門

1.在C++11中建立新執行緒   在每個c++應用程式中,都有一個預設的主執行緒,即main函式,在c++11中,我們可以通過建立std::thread類的物件來建立其他執行緒,每個std :: thread物件都可以與一個執行緒相關聯,只需包含標頭檔案&l

C++11 執行相關的標頭檔案

C++11 新標準中引入了四個標頭檔案來支援多執行緒程式設計,他們分別是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。 <atomic&g