C++工程师面试宝典系列之多线程编程

1.介绍

多进程与多线程:

C++工程师面试宝典系列之多线程编程_第1张图片

#include 
#include 
using namespace std;

void function_1() {
	cout << "www.vcbh.bvn" << endl;

}

int main() {
	thread t1(function_1);  //t1子线程
	t1.detach();  //主线程执行得太快,子线程来不及执行
	              //detach之后就不能join
	
	// ...

	if (t1.joinable())
	{
		t1.join();
	}
		
	return 0;
}

结论:一个线程t1只能被join()或者detach()一次。

=======================================================================================

2.线程管理

#include 
#include 
#include 
using namespace std;

void function_1() {
	cout << "www.vcbh.bvn" << endl;

}

class Fctor{
public:
	void operator()(string& msg){   //通过应用可以减少很多的赋值操作
		for (int i = 0; i > -100; i--)
			cout << "from t1:" << msg << endl;
	}
};


int main() {
/*	Fctor fct;  //由一个类构造一个线程
	thread t1(fct);  //t1子线程开始运行
*/
	string s = "i l nhfjf";
	thread t1((Fctor()),s);
	try{
		for (int i = 0; i < 100; i++)
		{
			cout << "from main:" << i << endl;
		}
	}
	catch (...)
	{
		t1.join();
		throw;
	}
	
	t1.join();
	
		
	return 0;
}

#include 
#include 
#include 
using namespace std;

void function_1() {
	cout << "www.vcbh.bvn" << endl;

}

class Fctor{
public:
	void operator()(string& msg){   //通过应用可以减少很多的赋值操作
			cout << "from t1:" << msg << endl;
			msg = "hehuanlin";
	}
};


int main() {
/*	Fctor fct;  //由一个类构造一个线程
	thread t1(fct);  //t1子线程开始运行
*/
	string s = "i l nhfjf";
	thread t1((Fctor()),ref(s));
	
	
	t1.join();
	//cout<<"from main:"<

#include 
#include 
#include 
using namespace std;

void function_1() {
	cout << "www.vcbh.bvn" << endl;

}

class Fctor{
public:
	void operator()(string& msg){   //通过应用可以减少很多的赋值操作
			cout << "from t1:" << msg << endl;
			msg = "hehuanlin";
	}
};


int main() {
/*	Fctor fct;  //由一个类构造一个线程
	thread t1(fct);  //t1子线程开始运行
*/
	string s = "i l nhfjf";
	cout << this_thread::get_id() << endl;  //主线程的id

	thread t1((Fctor()),move(s));
	
	thread t2 = move(t1);  //线程只能被移动,不能被赋值
	cout << t2.get_id() << endl;  //t2线程的id

	t2.join();
	//cout<<"from main:"<


=======================================================================================

3.数据竞争与互斥对象


=======================================================================================

4.死锁


=======================================================================================

5.Unique  Lock 和Lazy  Init


=======================================================================================

6.条件变量


=======================================================================================

7.Future , Promise 和asyn


=======================================================================================

8.使用可调用对象


=======================================================================================

9.packaged_task


=======================================================================================

10.回顾和时间约束






















































你可能感兴趣的:(C++)