c++thread里暂停线程_如何终止C++ 11中的线程?

这个问题实际上具有更深的性质,对多线程概念的一般理解将为您提供有关此主题的深入见解。事实上,没有任何语言或任何操作系统为您提供异步突然线程终止的功能,而不会警告不使用它们。所有这些执行环境强烈建议开发人员甚至需要在协作或同步线程终止的基础上构建多线程应用程序。这个共同的决定和建议的原因是它们都建立在相同的通用多线程模型的基础上。

让我们比较多处理和多线程概念,以更好地理解第二个优点和局限性。

多处理假定将整个执行环境分割为由操作系统控制的一组完全隔离的进程。进程并入和隔离执行环境状态,包括进程和其中的数据以及文件,套接字,同步对象等所有系统资源的本地内存。隔离是该过程的关键重要特征,因为它限制了过程边界的故障传播。换句话说,没有一个进程会影响系统中任何其他进程的一致性。对于过程行为也是如此,但是以更少的限制和更模糊的方式。在这样的环境中,任何进程都可以在任意“任意”的时刻被杀死,因为首先每个进程都是孤立的,其次,操作系统对进程使用的所有资源有完全的了解,并且可以释放所有资源而不会泄漏,最后进程将被终止通过操作系统不是真正在任意时刻,而是在过程状态众所周知的明确定义点的数量上。

相反,多线程假定在同一进程中运行多个线程。但是,所有这些线程共享相同的隔离框,并且没有任何操作系统控制进程的内部状态。因此任何线程都能够改变全局进程状态并破坏它。同时,众所周知线程的状态可以安全地杀死一个线程的点完全取决于应用程序逻辑,并且既不知道操作系统也不知道编程语言运行时。因此,在任意时刻线程终止意味着在其执行路径的任意点将其终止并容易导致进程范围内的数据损坏,内存和处理泄漏,线程泄漏和螺旋锁以及其他进程内同步原语存在于关闭状态阻止其他线程进行。

由于这个原因,常用的方法是强制开发人员实现同步或合作式线程终止,其中一个线程可以请求其他线程终止,而其他线程在明确定义的点可以检查该请求并从明确定义的状态,并以安全一致的方式释放所有全球全系统资源和当地全过程资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值