杀死执行纪念品的线程安全吗?

Is it safe to kill a thread that is executing a memcpy?

本文关键字:安全 线程 执行 纪念品      更新时间:2023-10-16

上下文:

我正在处理一个需要快速访问大文件的应用程序,因此我使用内存映射。因此,阅读和写作成为简单的memcpy。我现在正在尝试增加流产任何读取或正在进行的书写的能力。

想到的第一件事(因为我不知道任何可中断的memcpy函数(是定期 memcpy几个kb,并检查该操作是否应中止。如果读取相当快,这将确保近乎无限的流产。

如果不是该应用程序不应花费很长时间,所以我的第二个想法是使用多线程。纪念品发生在其自己的线程中,并且控制线程在信号堕胎的事件和memcpy-thread上使用WaitForMultipleObjects。如果向堕胎事件发出信号,它将杀死纪念性线程。但是,终端上的文档指出,应该绝对确定一个人不会通过不发布Ressource来使系统处于不良状态。

问题:

memcpy在复制映射的内存时会做任何会使杀死它不安全的事情吗?这样做安全吗?它是否取决于实现(使用与Windows X86-64不同的操作系统/体系结构(?


我确实意识到,使用第二种方法可能是完全的过度杀伤,因为没有1kb读/写入是实际的,但我只是想安全。

如果您应该选择其他设计,则不应将TerminateThread视为正常功能,它更多用于调试/电动工具。

我建议您围绕memcpy创建一个包装器,该包装量在块中复制。块的大小实际上取决于您,取决于您的响应性要求。1个MIB可能是一个很好的起点。

如果您绝对想杀死线程,则必须考虑几件事:

  • 您显然对memcpy的内部工作方式或复制多少一无所知
  • 终止线程会泄漏某些版本的Windows内存。有解决方法。
  • 不要在线程中握住任何锁。