您好,登錄后才能下訂單哦!
C++11中的多線程初探是怎樣的,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
相信 Linux 程序員都用過(guò) Pthread, 但有了 C++11 的 std::thread 以后,你可以在語(yǔ)言層面編寫(xiě)多線程程序了,直接的好處就是多線程程序的可移植性得到了很大的提高,所以作為一名 C++ 程序員,熟悉 C++11 的多線程編程方式還是很有益處的。
如果你對(duì) C++11 不太熟悉,我也收集了一些關(guān)于C++11的資料,供大家查閱:
資料匯http://www.open-std.org/jtc1/sc22/wg21/
C++0x/C++11 Support in GCC:http://gcc.gnu.org/projects/cxx0x.html
What is C++0x:https://www2.research.att.com/~bs/what-is-2009.pdf
Overview of the New C++:http://www.artima.com/shop/overview_of_the_new_cpp
Overview of the New C++ (C++0x).pdf:http://ishare.iask.sina.com.cn/f/20120005.html?from=likeA Brief Look at C++0x:http://www.artima.com/cppsource/cpp0x.html
Summary of C++11 Feature Availability in gcc and MSVC:http://www.aristeia.com/C++11/C++11FeatureAvailability.htm
C++ 11: Come Closer:http://www.codeproject.com/Articles/344282/Cplusplus-11-Come-Closer
C++11 threads, locks and condition variables: http://www.codeproject.com/Articles/598695/Cplusplus11-threads-locks-and-condition-variables
Move Semantics and Perfect Forwarding in C++11:http://www.codeproject.com/Articles/397492/Move-Semantics-and-Perfect-Forwarding-in-Cplusplus
http://solarianprogrammer.com/categories/C++11/
C++11 Concurrency:http://www.baptiste-wicht.com/2012/03/cpp11-concurrency-part1-start-threads/
http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/sfacm-cleaned.pdf
http://en.cppreference.com/w/cpp/thread
http://isocpp.org/blog/2012/12/c11-a-cheat-sheet-alex-sinyakov
The Biggest Changes in C++11:http://blog.smartbear.com/c-plus-plus/the-biggest-changes-in-c11-and-why-you-should-care/
Ten C++11 Features Every C++ Developer Should Use:http://www.codeproject.com/Articles/570638/Ten-Cplusplus11-Features-Every-Cplusplus-Developer
C++11 – A Glance [part 1 of n]:http://www.codeproject.com/Articles/312029/Cplusplus11-A-Glance-part-1-of-n
C++11 – A Glance [part 2 of n]:http://www.codeproject.com/Articles/314415/Cplusplus11-A-Glance-part-2-of-n
C++11(及現(xiàn)代C++風(fēng)格)和快速迭代式開(kāi)發(fā):http://mindhacks.cn/2012/08/27/modern-cpp-practices/
Lambda Functions in C++11 - the Definitive Guide:http://www.cprogramming.com/c++11/c++11-lambda-closures.html
Better types in C++11 - nullptr, enum classes (strongly typed enumerations) and cstdint:http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html
Rvalue-references-and-move-semantics-in-c++11:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html
http://www.gotw.ca/publications/index.htm
http://www.devx.com/SpecialReports/Door/38865
Multi-threading in C++0x:http://accu.org/index.php/journals/1584
C++ 0X feature summary cheat sheat:http://www.iesensor.com/blog/2011/05/31/c-0x-feature-summary-cheat-sheat/
Multithreading in C++0x part 1: Starting Threads:http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-1-starting-threads.html
http://en.cppreference.com/w/cpp/thread
http://www.cplusplus.com/reference/multithreading/
好了,下面來(lái)說(shuō)正題吧
與 C++11 多線程相關(guān)的頭文件
C++11 新標(biāo)準(zhǔn)中引入了四個(gè)頭文件來(lái)支持多線程編程,他們分別是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。
<atomic>:該頭文主要聲明了兩個(gè)類, std::atomic 和 std::atomic_flag,另外還聲明了一套 C 風(fēng)格的原子類型和與 C 兼容的原子操作的函數(shù)。 <thread>:該頭文件主要聲明了 std::thread 類,另外 std::this_thread 命名空間也在該頭文件中。 <mutex>:該頭文件主要聲明了與互斥量(mutex)相關(guān)的類,包括 std::mutex 系列類,std::lock_guard, std::unique_lock, 以及其他的類型和函數(shù)。 <condition_variable>:該頭文件主要聲明了與條件變量相關(guān)的類,包括 std::condition_variable 和 std::condition_variable_any。 <future>:該頭文件主要聲明了 std::promise, std::package_task 兩個(gè) Provider 類,以及 std::future 和 std::shared_future 兩個(gè) Future 類,另外還有一些與之相關(guān)的類型和函數(shù),std::async() 函數(shù)就聲明在此頭文件中。
std::thread "Hello world"
下面是一個(gè)最簡(jiǎn)單的使用 std::thread 類的例子:
#include <stdio.h>#include <stdlib.h>#include <iostream> // std::cout#include <thread> // std::threadvoid thread_task() { std::cout << "hello thread" << std::endl;}/* * === FUNCTION ========================================================= * Name: main * Description: program entry routine. * ======================================================================== */int main(int argc, const char *argv[]){ std::thread t(thread_task); t.join(); return EXIT_SUCCESS;} /* ---------- end of function main ---------- */
Makefile 如下:
all:ThreadCC=g++CPPFLAGS=-Wall -std=c++11 -ggdbLDFLAGS=-pthreadThread:Thread.o $(CC) $(LDFLAGS) -o $@ $^Thread.o:Thread.cc $(CC) $(CPPFLAGS) -o $@ -c $^.PHONY: cleanclean: rm Thread.o Thread
注意在 Linux GCC4.6 環(huán)境下,編譯時(shí)需要加 -pthread,否則執(zhí)行時(shí)會(huì)出現(xiàn):
$ ./Threadterminate called after throwing an instance of 'std::system_error' what(): Operation not permittedAborted (core dumped)
原因是 GCC 默認(rèn)沒(méi)有加載 pthread 庫(kù),據(jù)說(shuō)在后續(xù)的版本中可以不用在編譯時(shí)添加 -pthread 選項(xiàng)。
關(guān)于C++11中的多線程初探是怎樣的問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。