国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++入門到精通】 線程庫 | thread類 C++11 [ C++入門 ]

這篇具有很好參考價值的文章主要介紹了【C++入門到精通】 線程庫 | thread類 C++11 [ C++入門 ]。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【C++入門到精通】 線程庫 | thread類 C++11 [ C++入門 ],C++,c++,java,jvm,開發(fā)語言

引言

當討論現(xiàn)代編程語言的特性時,C++11無疑是一個不容忽視的里程碑。在前一篇文章中,我們深入探討了Lambda表達式在C++11中的引入和應(yīng)用。本文將繼續(xù)探索C++11的強大功能,具體而言,我們這篇文章將聚焦于線程庫和其中的thread類。

線程在多任務(wù)處理中起著至關(guān)重要的作用,它們允許程序同時執(zhí)行多個任務(wù),從而提高效率和響應(yīng)速度。在C++11之前,線程的處理相對復雜且容易出錯。然而,在C++11中引入的thread類為我們帶來了更加便捷和安全的線程管理方式。讓我們一起深入研究C++11線程庫中的thread類,探索多線程編程的無限潛力吧!

一、thread類的簡單介紹

thread的官方文檔
【C++入門到精通】 線程庫 | thread類 C++11 [ C++入門 ],C++,c++,java,jvm,開發(fā)語言

thread類是C++11引入的一個重要特性,它位于<thread>頭文件中,并提供了一種簡單而強大的方式來實現(xiàn)多線程編程。

使用thread類,我們可以輕松地創(chuàng)建和管理線程。通過創(chuàng)建thread對象,我們可以指定要執(zhí)行的線程函數(shù),并傳遞所需的參數(shù)。一旦線程對象被創(chuàng)建,我們可以使用它的成員函數(shù)來控制線程的生命周期,如啟動線程、等待線程完成、檢查線程是否運行等。

?以下是thread類的一些常用成員函數(shù):

函數(shù)名 功能
構(gòu)造函數(shù) 用于創(chuàng)建線程對象,并指定要執(zhí)行的函數(shù)或可調(diào)用對象。
start() 啟動線程的執(zhí)行,使線程進入就緒狀態(tài)并開始運行。
join() 阻塞當前線程,直到被調(diào)用的線程執(zhí)行完畢。通常用于等待線程的結(jié)束,并獲取線程的返回值(如果有)。
detach() 將線程對象設(shè)置為分離狀態(tài),使得線程無法被其他線程join(),并在執(zhí)行完畢后自動釋放資源。
get_id() 返回線程的ID,用于唯一標識一個線程。
joinable() 查詢線程是否可執(zhí)行,即查詢線程是否已經(jīng)啟動但未被join()。
hardware_concurrency() 返回當前系統(tǒng)支持的最大線程數(shù),通常與CPU核心數(shù)相同。

??注意:以上僅列舉了thread類的部分常用成員函數(shù),還有其他一些成員函數(shù)和靜態(tài)成員函數(shù)可供我們使用。同時,在使用這些成員函數(shù)時,我們需要注意線程安全性和同步機制,以避免出現(xiàn)競態(tài)條件和數(shù)據(jù)不一致的問題。

二、線程函數(shù)詳細介紹

1. start() 函數(shù)

start()函數(shù)通常是由線程對象調(diào)用的,用于開始執(zhí)行一個新線程。

(1)頭文件

start()函數(shù)在C++標準庫的<thread>頭文件中進行聲明。

(2)函數(shù)原型

start()函數(shù)的函數(shù)原型如下:

void start();

2. join() 函數(shù)

在C++標準庫中,std::thread類提供了join()函數(shù)用于等待一個線程的結(jié)束并回收資源。

(1)頭文件

join()函數(shù)在C++標準庫的<thread>頭文件中進行聲明。

(2)函數(shù)原型

join()函數(shù)的函數(shù)原型如下:

void join();

3. detach() 函數(shù)

detach()函數(shù)是std::thread類提供的一個成員函數(shù),用于將線程與std::thread對象分離,使其成為一個獨立的線程,并在后臺運行。

(1)頭文件

detach()函數(shù)在C++標準庫的<thread>頭文件中進行聲明。

(2)函數(shù)原型

detach()函數(shù)的函數(shù)原型如下:

void detach();

(3)使用示例

下面是一個使用std::thread及其detach()函數(shù)的示例:

#include <iostream>
#include <thread>

void thread_func()
{
    std::cout << "Hello from new thread!" << std::endl;
}

int main()
{
    std::thread t(thread_func);  // 創(chuàng)建一個新線程,并指定線程函數(shù)
    t.detach();  // 分離新線程
    std::cout << "Hello from main thread!" << std::endl;
    return 0;
}

在上述示例中,我們首先創(chuàng)建一個std::thread對象t,并將一個線程函數(shù)thread_func作為參數(shù)傳遞給構(gòu)造函數(shù)。然后,我們通過調(diào)用t.detach()函數(shù)將新線程與std::thread對象分離。最后,主線程輸出“Hello from main thread!”。

在運行上述示例時,將會看到如下輸出:

Hello from main thread!
Hello from new thread!

由于我們在主線程中調(diào)用了t.detach()函數(shù),新線程成為一個獨立的線程,并在后臺運行。因此,在輸出“Hello from main thread!”之后,新線程才會輸出“Hello from new thread!”。

4. get_id() 函數(shù)

get_id()函數(shù)是std::thread類提供的一個成員函數(shù),用于獲取與std::thread對象相關(guān)聯(lián)的線程的ID。

(1)頭文件

get_id()函數(shù)在C++標準庫的<thread>頭文件中進行聲明。

(2)函數(shù)原型

get_id()函數(shù)的函數(shù)原型如下:

std::thread::id get_id() const noexcept;

(3)使用示例

下面是一個使用std::thread及其get_id()函數(shù)的示例:

#include <iostream>
#include <thread>

void thread_func()
{
    std::cout << "Thread ID: " << std::this_thread::get_id() << std::endl;
}

int main()
{
    std::thread t(thread_func);  // 創(chuàng)建一個新線程,并指定線程函數(shù)
    std::cout << "Main thread ID: " << std::this_thread::get_id() << std::endl;
    t.join();  // 等待新線程結(jié)束
    return 0;
}

在上述示例中,我們首先創(chuàng)建一個std::thread對象t,并將一個線程函數(shù)thread_func作為參數(shù)傳遞給構(gòu)造函數(shù)。然后,我們通過調(diào)用t.join()函數(shù)等待新線程結(jié)束。在新線程的線程函數(shù)中,我們輸出線程的ID。在主線程中,我們也輸出主線程的ID。

在運行上述示例時,將會看到如下輸出:

Main thread ID: 140102324408064
Thread ID: 140102234146560

由于我們在主線程中調(diào)用了std::this_thread::get_id()函數(shù)和新線程中的get_id()函數(shù),分別獲取了主線程和新線程的ID??梢钥吹剑瑑蓚€線程的ID是不同的。

5. joinable() 函數(shù)

joinable()函數(shù)是std::thread類提供的一個成員函數(shù),用于檢查與std::thread對象關(guān)聯(lián)的線程是否可以被join或detach。

(1)頭文件

joinable()函數(shù)在C++標準庫的<thread>頭文件中進行聲明。

(2)函數(shù)原型

joinable()函數(shù)的函數(shù)原型如下:

bool joinable() const noexcept;

(3)參數(shù)解釋

joinable()函數(shù)沒有參數(shù)。調(diào)用該函數(shù)時,將返回一個bool類型的值,表示與std::thread對象相關(guān)聯(lián)的線程是否可以被join或detach。

(4)返回值

joinable()函數(shù)返回值類型為bool。如果與std::thread對象相關(guān)聯(lián)的線程可以被join或detach,則返回true;否則返回false。

(5)使用示例

下面是一個使用std::thread及其joinable()函數(shù)的示例:

#include <iostream>
#include <thread>

void thread_func()
{
    std::cout << "Hello from new thread!" << std::endl;
}

int main()
{
    std::thread t(thread_func);  // 創(chuàng)建一個新線程,并指定線程函數(shù)
    std::cout << "Is thread joinable? " << t.joinable() << std::endl;  // 輸出true
    t.join();  // 等待新線程結(jié)束
    std::cout << "Is thread joinable? " << t.joinable() << std::endl;  // 輸出false
    return 0;
}

在上述示例中,我們首先創(chuàng)建一個std::thread對象t,并將一個線程函數(shù)thread_func作為參數(shù)傳遞給構(gòu)造函數(shù)。然后,我們通過調(diào)用t.joinable()函數(shù)檢查與std::thread對象關(guān)聯(lián)的線程是否可以被joindetach。在新線程結(jié)束之前,該函數(shù)返回true。在調(diào)用t.join()函數(shù)等待新線程結(jié)束后,該函數(shù)返回false。

三、std::this_thread命名空間

C++11引入了std::this_thread命名空間,其中包含了一些與當前線程相關(guān)的函數(shù)和屬性。這些函數(shù)和屬性以全局函數(shù)或靜態(tài)成員函數(shù)的形式提供。

?以下是std::this_thread命名空間下的一些常用函數(shù):

函數(shù)名 功能
std::this_thread::get_id() 獲取當前線程的ID,返回一個std::thread::id對象。
std::this_thread::sleep_for() 使當前線程休眠一段指定的時間。接受一個std::chrono::duration作為參數(shù),表示休眠的時間間隔。
std::this_thread::yield() 暫時放棄當前線程的執(zhí)行,允許其他線程運行。調(diào)用yield()后,當前線程可能會被重新調(diào)度執(zhí)行,也可能繼續(xù)讓其他線程執(zhí)行。

??注意:這些函數(shù)是與當前線程直接相關(guān)的,而不是用于創(chuàng)建或管理線程的類。

溫馨提示

感謝您對博主文章的關(guān)注與支持!另外,我計劃在未來的更新中持續(xù)探討與本文相關(guān)的內(nèi)容,會為您帶來更多關(guān)于C++以及編程技術(shù)問題的深入解析、應(yīng)用案例和趣味玩法等。請繼續(xù)關(guān)注博主的更新,不要錯過任何精彩內(nèi)容!

再次感謝您的支持和關(guān)注。期待與您建立更緊密的互動,共同探索C++、算法和編程的奧秘。祝您生活愉快,排便順暢!
【C++入門到精通】 線程庫 | thread類 C++11 [ C++入門 ],C++,c++,java,jvm,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-762674.html

到了這里,關(guān)于【C++入門到精通】 線程庫 | thread類 C++11 [ C++入門 ]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • C語言從入門到精通第11天(數(shù)組的基本操作)

    C語言從入門到精通第11天(數(shù)組的基本操作)

    在程序設(shè)計中,為了方便處理數(shù)據(jù)把具有 相同類型 的若干變量按有序形式集合在一起,這些按序排列的同類數(shù)據(jù)元素的集合稱為數(shù)組。 在C語言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類型,一個數(shù)組可以分解為多個數(shù)組數(shù)組元素,這些數(shù)組的元素可以是基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。因此按

    2024年02月01日
    瀏覽(23)
  • C++11多線程—thread

    C++11多線程—thread

    ? 目錄 1.thread類 2.線程函數(shù)參數(shù) 3.原子性操作庫(atomic) 4.lock_guard與unique_lock 4.1mutex的種類 4.2lock_guard 4.3unique_lock 5.condition_variable ????????在C++11之前,涉及到多線程問題,都是和平臺相關(guān)的,比如windows和linux下各有自己的接 口,這使得代碼的可移植性比較差。C++11中最重要

    2023年04月16日
    瀏覽(15)
  • Java從入門到精通(一)· 語言背景

    Java從入門到精通(一)· 語言背景

    溫故而知新,閑著沒事干,準備將Java編程語言的知識點從頭梳理一遍,整理成筆記,逐篇發(fā)布。 部分圖片素材來源與B站“黑馬程序員”的課程。 Java是1995年 由Sun公司推出的一門高級編程語言。 業(yè)內(nèi)公認Java之父為 詹姆斯·高斯林 。 重要事件:2009年,Sun公司被 Oracle公司 收

    2024年02月15日
    瀏覽(23)
  • 【C++】多線程(thread)使用詳解

    【C++】多線程(thread)使用詳解

    多線程(multithreading),是指在軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多核CPU的支持的計算機能夠真正在同一時間執(zhí)行多個程序片段,進而提升程序的處理性能。在一個程序中,這些獨立運行的程序片段被稱為“ 線程 ”(Thread),利用其編程的概念就叫作“多線

    2024年02月14日
    瀏覽(21)
  • 網(wǎng)絡(luò)安全|滲透測試入門學習,從零基礎(chǔ)入門到精通—滲透中的開發(fā)語言

    網(wǎng)絡(luò)安全|滲透測試入門學習,從零基礎(chǔ)入門到精通—滲透中的開發(fā)語言

    目錄 前面的話 開發(fā)語言 1、html 解析 2、JavaScript 用法 3、JAVA ? 特性 4、PHP 作用 PHP 能做什么? 5、C/C++ 使用 如何學習 關(guān)于在滲透中需要學習的語言第一點個人認為就是可以打一下HTML,JS那些基礎(chǔ)知識,磨刀不誤砍柴工。其次,了解基本的代碼后,就可以去學習相關(guān)的漏洞知

    2024年02月09日
    瀏覽(20)
  • jvm從入門到精通

    jvm 1.jvm與java體系結(jié)構(gòu) 2.類加載子系統(tǒng) 3.運行時數(shù)據(jù)區(qū)概述及線程 4.程序計數(shù)器? 5.虛擬機棧 6.本地方法接口 7.本地方法棧 8.堆 ? ? ? ? ?????????? ????????

    2024年02月12日
    瀏覽(28)
  • JVM入門到精通

    JVM入門到精通

    Java Virtual Machine:Java虛擬機,用來保證Java語言跨平臺 Java虛擬機可以看做是一臺抽象的計算機,如同真實的計算機那樣,它有自己的指令集以及各種運行時內(nèi)存區(qū)域 Java虛擬機與Java語言并沒有必然的聯(lián)系,它只與特定的二進制文件格式(class文件格式所關(guān)聯(lián)) Java 虛擬機就是一個

    2024年02月14日
    瀏覽(19)
  • c++ 多線程: this_thread的使用

    在 C++11 中不僅添加了線程類,還添加了一個關(guān)于線程的命名空間 std::this_thread,在這個命名空間中提供了 四個公共的成員函數(shù) ,通過這些成員函數(shù)就可以對當前線程進行相關(guān)的操作了 調(diào)用命名空間 std::this_thread 中的 get_id() 方法可以得到 當前 線程的 線程 ID ,函數(shù)原型如下

    2024年02月11日
    瀏覽(9)
  • JAVA JDBC數(shù)據(jù)庫開發(fā)詳解:從入門到精通

    簡介: Java是一種面向?qū)ο?,安全靈活的編程語言,已經(jīng)成為了世界上最流行的編程語言之一。Java語言的一個重要應(yīng)用領(lǐng)域就是數(shù)據(jù)庫開發(fā)。通過Java?JDBC(Java?Database?Connectivity)?API,開發(fā)人員可以使用Java語言來訪問并操作各種數(shù)據(jù)庫。 本篇資料將會詳細介紹Java?JDBC數(shù)據(jù)庫

    2024年02月02日
    瀏覽(24)
  • 【STM32&RT-Thread零基礎(chǔ)入門】 7. 線程創(chuàng)建應(yīng)用(多線程運行機制)

    【STM32&RT-Thread零基礎(chǔ)入門】 7. 線程創(chuàng)建應(yīng)用(多線程運行機制)

    硬件:STM32F103ZET6、ST-LINK、usb轉(zhuǎn)串口工具、4個LED燈、1個蜂鳴器、4個1k電阻、2個按鍵、面包板、杜邦線 本章進一步研究多線程的運行機制。要求實現(xiàn)功能如下:創(chuàng)建2個線程,線程名稱分別為LED和BEEP。兩個線程的任務(wù)是連續(xù)5次打印本線程的名字后退出線程(注意:線程不執(zhí)行

    2024年02月03日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包