- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解 C++ 中的取消点到底是什么。我读过:
man page和 What are pthread cancellation points used for
但是我在某些方面仍然有点困惑。例如,我正在使用文件 write() 函数。显然这是一个取消点。因此,当我调用 write() 时,我可以看到另一个线程可能开始处理(因此我的代码从写入线程切换到另一个线程),这通常发生在写入缓冲区已满并且需要在写入之前清空时() 可以成功/完成。
但在我看来,这并不是线程的取消,而只是暂时的阻塞/挂起,并且没有线程“清理”要做...
所以我的问题是,取消积分与“阻止积分”有关系吗? - 它们真的是同一件事吗,还是有什么区别?任何有关取消点的清晰“顶级”描述都非常有用。
最佳答案
当线程退出执行时,其状态由操作系统保存,这并不是线程的取消。取消意味着根据请求终止线程,其具体目的是让所有内容在完成后处于最终状态(即释放所有资源,更新所有处理程序等)。
线程在取消过程中可能会发生所谓的阻塞。
示例:线程收到取消请求。操作系统将其排队,直到线程可取消。当线程变得可取消,并且线程正在执行取消点时,可以清理并取消线程。 write 函数是一个取消点,这意味着从操作系统的角度来看,在执行此函数时取消线程是安全的(所有相关资源的状态将保持一致)。
当取消过程运行时,线程可以被阻塞任意多次,操作系统认为合适。
作为补充说明,如果您查看 POSIX 对取消点的要求,就会发现几乎所有阻塞接口(interface)都必须是取消点。否则,在任何完全阻塞的线程(在此类调用中)上,将没有安全的方法来终止该线程。
关于c++ - 取消点到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753889/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!