如何将线程保留在处理器上直到事件发生?

发布于 2024-12-09 06:18:26 字数 183 浏览 1 评论 0原文

我在对驱动程序的 ioctl 调用中生成了几个线程。我还将内核关联分配给我的驱动程序。我想确保其中一个线程不会被调度,直到另一个线程标记特定事件。有什么方法可以不允许 Windows 调度程序关联我的线程。使用 _disable() 可能会挂起系统,因为事件可能需要几秒钟。

环境是windows 7,64bit

谢谢,

I am spawning few threads inside ioctl call to my driver. I am also assigning kernel affinity to my driver. I want to ensure one of the thread does not get scheduled out till a particular event is flagged by the other thread. Is there any way to not allow windows scheduler to context out my thread. Using _disable() may hang the system as event may take couple of seconds.

Environment is windows 7,64bit

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

祁梦 2024-12-16 06:18:26

您可能想要的是自旋锁。然而,这可能是一个坏主意,除非您可以保证您的驱动程序/应用程序始终在多处理器系统上运行,即使这样,这仍然是非常糟糕的做法。在单处理器系统上,如果线程自旋锁定,则向自旋锁定线程发出信号的另一个线程将永远不会被调度,因此无法向您的事件发出信号。自旋锁应该谨慎使用,并且仅当锁的时间很短时才使用,绝不是几秒钟。
听起来您需要使用事件或其他信号机制来同步线程并让 Windows 调度程序完成其工作。如果您需要快速响应事件,则可以使用中断或延迟过程调用 (DPC)。

What you are probably after is a spin lock. However this is probably a bad idea unless you can guarantee that your driver/application is always run on a multi-processor system, even then it is still very bad practice. On a single processor system if a thread spin locks then the other thread signalling the spin locked thread will never be scheduled and so can't signal your event. Spin locks are meant to be used sparingly and only when the lock is for a very short time, never a couple of seconds.
It sounds like you need to use an event or other signally mechanism to synchronise your threads and let the windows scheduler do its job. If you need to respond to an event very quickly then interrupts or a Deferred Procedure Call (DPC) could be used instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文