gpt4 book ai didi

multithreading - ThreadPool,QueueUserWorkItem和关机时死锁

转载 作者:行者123 更新时间:2023-12-03 18:52:03 26 4
gpt4 key购买 nike

我只是实现了一个线程池,如这里所述

Allen Bauer on thread pools

非常简单的实现,可以正常工作,但是我的应用程序不再关闭。似乎有两个工作线程(和另一个线程,我想是排队线程)卡在了函数中

ntdll.ZwRemoveIoCompletion

我记得在QueueUserWorkItem(线程池实现中使用的WinAPI函数)的帮助条目中读到了有关IO完成的内容,但是我无法正确理解它。我将WT_EXECUTELONGFUNCTION用于我的工作线程,因为执行可能需要一段时间,并且我希望创建一个新的工作线程,而不是等待现有线程完成。分配给工作线程的某些任务执行一些I/O任务。我尝试使用WT_EXECUTEINIOTHREAD,但似乎无济于事。

我应该提到,主线程等待进入关键部分,而调用堆栈仍在
System.Halt0, System.FinalizeUnits, Classes.Finalization, TThread.Destroy,
RtlEnterCriticalSection, RtlpWaitForCriticalSection

有什么想法我在这里做错了吗?感谢您的帮助。

最佳答案

为了确保辅助线程关闭,如果它们在空的IO完成端口上等待,则需要某种唤醒它们的方法。最简单的方法似乎是在端口上发布某种NULL消息-然后,他们应该将此消息视为有序停止的信号。

关于multithreading - ThreadPool,QueueUserWorkItem和关机时死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/704638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com