gpt4 book ai didi

c++ - 取消点到底是什么?

转载 作者:行者123 更新时间:2023-11-30 16:14:18 24 4
gpt4 key购买 nike

我正在尝试了解 C++ 中的取消点到底是什么。我读过:

man pageWhat are pthread cancellation points used for

但是我在某些方面仍然有点困惑。例如,我正在使用文件 write() 函数。显然这是一个取消点。因此,当我调用 write() 时,我可以看到另一个线程可能开始处理(因此我的代码从写入线程切换到另一个线程),这通常发生在写入缓冲区已满并且需要在写入之前清空时() 可以成功/完成。

但在我看来,这并不是线程的取消,而只是暂时的阻塞/挂起,并且没有线程“清理”要做...

所以我的问题是,取消积分与“阻止积分”有关系吗? - 它们真的是同一件事吗,还是有什么区别?任何有关取消点的清晰“顶级”描述都非常有用。

最佳答案

当线程退出执行时,其状态由操作系统保存,这并不是线程的取消。取消意味着根据请求终止线程,其具体目的是让所有内容在完成后处于最终状态(即释放所有资源,更新所有处理程序等)。

线程在取消过程中可能会发生所谓的阻塞。

示例:线程收到取消请求。操作系统将其排队,直到线程可取消。当线程变得可取消,并且线程正在执行取消点时,可以清理并取消线程。 write 函数是一个取消点,这意味着从操作系统的角度来看,在执行此函数时取消线程是安全的(所有相关资源的状态将保持一致)。

当取消过程运行时,线程可以被阻塞任意多次,操作系统认为合适。

作为补充说明,如果您查看 POSIX 对取消点的要求,就会发现几乎所有阻塞接口(interface)都必须是取消点。否则,在任何完全阻塞的线程(在此类调用中)上,将没有安全的方法来终止该线程。

http://man7.org/linux/man-pages/man7/pthreads.7.html

关于c++ - 取消点到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com