c++笔记 Thread

来源:互联网 发布:java 获取磁盘io 编辑:程序博客网 时间:2024/05/22 15:29
// CTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <thread>#include <iostream>void f1(int n){for (int i = 0; i < 5; ++i){std::cout << "Thread 1 executing\n";++n;std::this_thread::sleep_for(std::chrono::milliseconds(10));}}void f2(int& n){for (int i = 0; i < 1; ++i){std::cout << "Thread 2 executing\n";++n;std::this_thread::sleep_for(std::chrono::milliseconds(10));}}void f3(){for (int i = 0; i < 5; ++i){std::cout << "Thread 3 executing\n";std::this_thread::sleep_for(std::chrono::milliseconds(10));}}int _tmain(int argc, _TCHAR* argv[]){int n = 0;std::thread t1;std::thread t2(f1, n);<span style="white-space:pre"></span>//传参的构造函数std::thread t3(f2, std::ref(n)); //传引用的构造函数std::thread t4(std::move(t3));<span style="white-space:pre"></span>//将线程t3的所有者转移给t4
std::thread t5(f3);<span style="white-space:pre"></span>//不传参的构造函数std::cout << std::thread::hardware_concurrency() << std::endl;<span style="white-space:pre"></span>//当前线程数std::cout << t2.native_handle() << std::endl;<span style="white-space:pre"></span>//当前线程的指针地址std::cout << "Final value of n is " << n <<"\n";std::cout << "before swap\n";std::cout << "t2_id:" << t2.get_id() << "\n";std::cout << "t4_id:" << t4.get_id() << "\n";std::cout << "after swap \n";std::swap(t2, t4);<span style="white-space:pre"></span>//转换t2 t4std::cout << "t2_id:" << t2.get_id() << "\n";std::cout << "t4_id:" << t4.get_id() << "\n";
<span style="white-space:pre"></span><pre name="code" class="cpp">t5.detach();<span style="white-space:pre"></span>//独立出线程t5
t2.join();// 等待t2 线程结束 t4.join();
<span style="white-space:pre"></span>return 0;}

0 0
原创粉丝点击