使用openmp并行中止线程
Abort thread with openmp parallelization
我遇到了一个奇怪但可以理解的错误解决方案,我无法自己弄清楚。我正在创建线程System::Threading::Thread
来运行这样的函数:
try
{
perform_adapt_rgb(alg);
Control::Invoke(adpt_deg2);
}
catch ( ThreadAbortException^ e )
{
Control::Invoke(adpt_deg2);
//Thread::ResetAbort();
}
我没有粘贴整个东西,因为它没有意义,使它复杂。调用更新我的UI..当void perform_adapt_rgb(int alg);函数封装OMP周期,我试图通过线程从UI杀死进程->Abort();函数。在visual studio内测试一切工作正常,但如果从exe文件执行,它显示应用程序没有响应->等待解决方案,关闭对话框。现在我的猜测是,强迫OMP-ed周期意外结束是导致问题的原因,但我不完全确定,因为它确实在VS中工作,我可以调试它。没有OMP一切都很好。谁能告诉我怎么解决这个问题?
好了,伙计们,我整理好了。这可能不是最好的解决方案,但它有效,所以这对我来说不再重要了。我现在所做的是将长周期OMP分解为几个部分,检查一些全局bool,以确定我是否需要跳出函数。然后我简单地执行线程自杀…在求值结束时从线程内部调用abort,而不是从UI调用abort。如果有人有更好的解决办法,我就把它留着。
相关文章:
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- System Verilog DPI - 在 cpp 中运行并行线程,在 SV 中运行另一个并行线程
- 是否可以限制C++17并行"for_each"的线程数
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- 如何从多个线程并行安全地访问和写入复杂容器?
- 查询时间/周期是针对所有内核/线程的序列化请求还是并行请求?
- 如何在新的 C++17 并行算法中管理线程?
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 使用 vector<thread> 和 .join() 未并行运行的多线程C++程序
- 最大线程数 - 如何确定C++线程是否并行运行?
- C 多线程,在并行多个线程时获得SegFault
- FFmpeg:使用自定义线程池进行并行编码
- OpenMP 并行编程基于线程数与执行时间的关系
- 为什么在某些特定情况下具有多个线程(并行处理)会降低性能
- 使用C 中的线程并行计算
- Windows 线程:并行合并排序
- 使用哪个线程并行接口来使用堆栈进行任务共享和拆分
- 我如何在不同的核心上运行4个线程(并行)
- 调度大量线程,因此只有4个线程并行执行
- 从 Java 的多线程并行调用非线程安全的 DLL 函数