1

我正在尝试清理由特定线程创建的特定内存对象(因此只能由该线程访问)。我实现这一目标的唯一方法是在释放该内存块时切换到该特定线程。

这就是我分配特定内存上下文的方式:http: //imagebin.ca/img/S6mwZBFu.jpg

这就是我试图做的:

替代文字 http://imagebin.ca/img/DeTe9Z6h.jpg

我最初以如下方式添加了内存上下文的创建和销毁:

int Thread2::main()
{
     CudaMemoryContext *theCudaObj = new CudaMemoryContext();
     while(!TerminateStatus())
     {
        ...
     }
     delete theCudaObj;
     return 0;
}

但是,这种方法效果不佳,即当我清理“删除 theCudaObj;”时程序崩溃了。线。我想知道是否可以在清理时切换活动线程,或者分配 CUDA 上下文以供两个线程访问,以便我可以通过两个线程轻松地清理和访问它。提前感谢您的建议。

4

2 回答 2

1

Thread#1 是如何破坏 Thread#2 的?通常最好发出一个线程终止自身的信号,而不是使用 TerminateThread()。

于 2009-11-22T01:18:08.437 回答
0

您最初的方法看起来像是处理事情的正确方法 - 当线程发出终止信号时,它会停止循环并清理任何分配的内存。

在您发出线程终止信号的上下文中,请确保在允许应用程序退出之前等待它退出。过早退出可能会导致您的崩溃。在附加调试器的情况下运行并设置为在抛出异常以进行诊断时中断。

于 2009-11-22T15:45:12.397 回答