gpt4 book ai didi

c++ - 如何使用 "priority"进行多线程处理?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:28 26 4
gpt4 key购买 nike

我有多个线程在后台处理多个文件,而程序处于空闲状态。
为了提高磁盘吞吐量,我使用临界区来确保不会有两个线程同时使用同一个磁盘

(伪)代码看起来像这样:

void RunThread(HANDLE fileHandle)
{
// Acquire CRITICAL_SECTION for disk
CritSecLock diskLock(GetDiskLock(fileHandle));

for (...)
{
// Do some processing on file
}
}

一旦用户请求要处理的文件,我需要停止所有线程 -- 除了正在处理所请求文件的线程。处理文件后,我想再次恢复所有线程。

考虑到 SuspendThread 不是一个好主意,我该如何停止除正在处理相关输入的线程之外的所有线程?

我需要什么样的线程对象/功能——互斥量、信号量、事件或其他?我将如何使用它们? (我希望与 Windows XP 兼容。)

最佳答案

我建议您以完全不同的方式进行操作。如果您真的希望每个磁盘只需要一个线程(我不认为这是个好主意),那么您应该为每个磁盘创建一个线程,并在将文件排队等待处理时分发它们。

为了实现对特定文件的优先级请求,我会让一个线程在其正常处理期间(当然还有在其主队列等待循环中)的几个点检查“优先级插槽”。

关于c++ - 如何使用 "priority"进行多线程处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877208/

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