C++11之thread线程
生活随笔
收集整理的這篇文章主要介紹了
C++11之thread线程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天由于項目需求(其實是某門課的一個大作業,不好意思說出口啊。。。),想要使用多線程。相信大家一般用的是linux上的POSIX C或windows上的線程庫,然而這些線程庫以來于特定系統,并不“標準”。2011年發布的C++11標準中提供了并發執行的相關操作:
C++11 新標準中引入了四個頭文件來支持多線程編程,他們分別是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。
- <atomic>:該頭文主要聲明了兩個類, std::atomic 和 std::atomic_flag,另外還聲明了一套 C 風格的原子類型和與 C 兼容的原子操作的函數。<thread>:該頭文件主要聲明了 std::thread 類,另外 std::this_thread 命名空間也在該頭文件中。
- <mutex>:該頭文件主要聲明了與互斥量(mutex)相關的類,包括 std::mutex 系列類,std::lock_guard, std::unique_lock, 以及其他的類型和函數。
- <condition_variable>:該頭文件主要聲明了與條件變量相關的類,包括 std::condition_variable 和 std::condition_variable_any。
- <future>:該頭文件主要聲明了 std::promise, std::package_task 兩個 Provider 類,以及 std::future 和 std::shared_future 兩個 Future 類,另外還有一些與之相關的類型和函數,std::async() 函數就聲明在此頭文件中。
std::thread 之"Hello world":
#include <iostream> #include <thread> // std::threadvoid thread_task() {//同其他線程庫一樣,返回值類型為voidstd::cout << "hello thread" << std::endl; }int main(int argc, char *argv[]) {std::thread t(thread_task);t.join();//類似java里的start()return EXIT_SUCCESS; }編譯時注意:加上-std=c++0x (新標準) -lpthread 因為GCC默認沒有加載 pthread 庫,我現在用的GCC4.6,也許以后的版本就不用這么麻煩了。
如果忘加-lpthread會提示:terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
已放棄 (核心已轉儲)
可以寫個makefile方便編譯,一勞永逸:
all:myThreadCC=g++ CPPFLAGS=-Wall -std=c++0x -ggdb LDFLAGS=-pthreadmyThread:myThread.o$(CC) $(LDFLAGS) -o $@ $^myThread.o:myThread.cc$(CC) $(CPPFLAGS) -o $@ -c $^.PHONY:cleanclean:rm myThread.o myThread?
?
轉載于:https://www.cnblogs.com/makefile/p/3798328.html
總結
以上是生活随笔為你收集整理的C++11之thread线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 开机自动启动服务
- 下一篇: 【Lucene4.8教程之四】分析