pul*_*ser 1 c++ winapi multithreading terminate memory-mapped-files
语境:
我正在开发一个需要快速访问大文件的应用程序,因此我使用内存映射。memcpy阅读和写作因此变得简单。我现在正在尝试添加中止任何正在进行的读取或写入的功能。
我想到的第一件事(因为我不知道任何可中断的 memcpy 函数)是定期检查memcpy几KB并检查操作是否应该中止。如果读取速度相当快,这应该可以确保近乎瞬时的中止。
如果不是,那么应用程序不应该花费很长时间才能中止,所以我的第二个想法是使用多线程。memcpy 发生在它自己的线程中,控制线程使用WaitForMultipleObjects发出中止信号的事件和 memcpy 线程。如果中止事件收到信号,它将杀死 memcpy 线程。然而,TerminateThread 的文档指出,应该绝对确保不会因为不释放资源而使系统处于不良状态。
问题:
memcpy 是否会执行任何操作,导致在复制映射内存时杀死它变得不安全?这样做安全吗?它是否依赖于实现(使用与 Windows x86-64 不同的操作系统/体系结构)?
我确实意识到使用第二种方法可能完全是矫枉过正,因为实际上没有 1KB 读/写会花费那么长时间,但我只是想安全一点。
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |