杀死执行纪念品的线程安全吗?
Is it safe to kill a thread that is executing a memcpy?
上下文:
我正在处理一个需要快速访问大文件的应用程序,因此我使用内存映射。因此,阅读和写作成为简单的memcpy
。我现在正在尝试增加流产任何读取或正在进行的书写的能力。
想到的第一件事(因为我不知道任何可中断的memcpy函数(是定期 memcpy
几个kb,并检查该操作是否应中止。如果读取相当快,这将确保近乎无限的流产。
如果不是该应用程序不应花费很长时间,所以我的第二个想法是使用多线程。纪念品发生在其自己的线程中,并且控制线程在信号堕胎的事件和memcpy-thread上使用WaitForMultipleObjects
。如果向堕胎事件发出信号,它将杀死纪念性线程。但是,终端上的文档指出,应该绝对确定一个人不会通过不发布Ressource来使系统处于不良状态。
问题:
memcpy在复制映射的内存时会做任何会使杀死它不安全的事情吗?这样做安全吗?它是否取决于实现(使用与Windows X86-64不同的操作系统/体系结构(?
我确实意识到,使用第二种方法可能是完全的过度杀伤,因为没有1kb读/写入是实际的,但我只是想安全。
如果您应该选择其他设计,则不应将TerminateThread
视为正常功能,它更多用于调试/电动工具。
我建议您围绕memcpy
创建一个包装器,该包装量在块中复制。块的大小实际上取决于您,取决于您的响应性要求。1个MIB可能是一个很好的起点。
如果您绝对想杀死线程,则必须考虑几件事:
- 您显然对
memcpy
的内部工作方式或复制多少一无所知 - 终止线程会泄漏某些版本的Windows内存。有解决方法。
- 不要在线程中握住任何锁。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 在std::thread中,joinable()然后join()线程安全吗
- 在c++队列中使用pop和visit实现线程安全
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 线程安全运算符<<
- 如何使缓存线程安全
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 提升精神 V2 Qi 语法线程安全吗?
- 线程调用的函数对对象删除是否安全?
- asio 链对象线程安全吗?
- 线程安全队列 c++
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 有没有更好的方法可以使此代码线程安全?线程局部静态似乎是一个生硬的工具