C++ 学习笔记

文章目录

  • std::thread
  • std::lock_guard
  • &

std::thread

线程有两个状态joinable 和detached:

  1. joinable 表示线程处于活动状态
  2. detached 表示线程独立运行 ,但是程序结束时,同程序退出。

实例程序

#include
#include
#include 
#include 
#include
using namespace std;
class MCLtest {
public:
	int a;
public:
	MCLtest() {
		a = 1;
	}
};
int main(void) {
	int i = 0;
	std::thread t([&]{
		i++;
		while (1)
		{
			printf("1\n");
			sleep(1);
		}
	}
	);
	if(t.joinable()){
		printf("joinable\n");
		t.detach();
	}
	// t.join();
	sleep(100);
	return 0;
}

注意事项 当类成员函数使用thread 线程来跑一个类成员函数传递的第一个参数为this 指针。

实例代码

void ActionController::StartLooper() {
	...............
}
void ActionController::Run() {
	.............
	std::thread looper{&ActionController::StartLooper, this};
	looper.join();
	..............
}

std::lock_guard

就是一个把封装了的锁,创建是上锁,销毁时解锁。

实例代码

#include 
#include 
 
int g_i = 0;
std::mutex g_i_mutex;  // protects g_i
 
void safe_increment()
{
    std::lock_guard lock(g_i_mutex);
    ++g_i;
 
    // g_i_mutex is automatically released when lock
    // goes out of scope
}
 
int main()
{
    std::thread t1(safe_increment);
    std::thread t2(safe_increment);
 
    t1.join();
    t2.join();
}

&

在函数名称前使用& 表示返回值为引用类型。

未完待续。。。。。。。

https://my.oschina.net/yangcol/blog/123433
https://en.cppreference.com/w/cpp/thread/thread/joinable

你可能感兴趣的:(计算机之路)