c++并发编程(七)—— 线程中断

本文探讨如何在C++中优雅地中断长时间运行的线程。通过设置线程可访问的标志位来判断是否中断,但这种方法在多线程环境下可能无法精确控制特定线程的停止。为解决这个问题,提出了使用thread_local变量为每个线程创建独立的中断标志,从而实现对单个线程的中断控制。
摘要由CSDN通过智能技术生成

有些线程是作为长时间工作的,其运行函数内部都会有个无限循环,但是某些时候我们希望能够主动停止线程:如人为停止或某一条件满足后退出。

这里我们首先看看一个简单的思路:要想从一个线程终止另外一个线程,我们可以设置一个flag,这两个线程均可以访问的到,于是需要被中断的线程只需要检测这个flag的状态是否被改变,并由此作出是否中断的决定。

这里是一个例子:

class thread_class {

public:
	thread_class():isFinish(false){}

	void thread_run() {
		while (!isFinish) {
			std::this_thread::sleep_for(std::chrono::milliseconds(1000));
			std::cout << "still run" << std::endl;

		}
	}

	void setFinish() {
		isFinish = true;
	}

private:
	std::atomic<bool> isFinish;
};

int main()
{
	thread_class tc;
	std::thread t(&thread_class::thread_run, &tc);
	std::this_thread::sleep_for(std::chrono::milliseconds(5000));
	tc.setFinish();
	t.join();
	std::cout << "thread finish" << std::endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值