c - pthread_kill() 使用危险吗?
问题描述
我读过TerminateThread()
在 WinAPI 中使用是危险的。
pthread_kill()
在Linux中使用也很危险吗?
编辑:对不起,我的意思是pthread_kill()
而不是pthread_exit()
。
解决方案
引用汉弗莱·阿普尔比爵士的话,答案是“是的,也不是”。
调用 pthread_exit() 本身并不危险,并且在您的线程退出其方法时被隐式调用。但是,如果您手动调用它,则会出现一些“陷阱”。
- 调用 this 时会调用所有清理处理程序。因此,如果您调用此方法,然后访问清理处理程序已清理的一些内存,则会出现内存错误。
- 同样,调用 this 后,线程的任何局部变量和线程局部变量都将变为无效。因此,如果对它们进行引用,您可能会遇到内存错误。
- 如果已经为线程(隐式或显式)调用了此方法,则再次调用它具有未定义的行为,并且
- 如果这是您进程中的最后一个线程,这将导致进程退出。
如果您注意上述情况(即,如果您在调用 pthread_exit 后注意不引用线程的任何内容),那么手动调用 call 是安全的。但是,如果您使用 C++ 而不是 CI,强烈建议使用 std::thread 类而不是手动执行。它更易于阅读,涉及的代码更少,并确保您不会破坏上述任何内容。
有关更多信息,请键入“man pthread_exit”,它基本上会告诉您上述内容。
推荐阅读
- python - Selenium 不渲染 html 页面源
- c++ - 将计算机置于睡眠模式然后再次恢复后,Windows 服务会发生什么情况?
- python - 将字符串转换为已经存在的变量(熊猫)
- salesforce - 从 Salesforce 应用程序获取/识别表单数据的问题
- firefox - 升级到 Firefox 85 后 Pinboard 小书签被阻止
- ios - 如何从 EXIF 编号创建 CGColorSpace?
- angular - Angular Resolver 不工作 没有 () 的提供者
- javascript - 输入字段中不应只允许空格
- regex - 正则表达式删除 \u00A0
- postgresql - 根据 postgresql 中的下一个 id 更新当前 id