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

标签 c++ c multithreading winapi atl

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

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

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/

相关文章:

c++ - CTreeCtrl 中的字体更改后未调整项目大小

c - 警告 C4047 : '=' : 'int' differs in levels of indirection from 'char *'

java - 为什么在 Java 锁实现中没有使用 synchronized 关键字?

c++ - 为什么c++中没有默认的多态克隆操作符机制?

c++ - 为什么只有与int变量一起使用时std cin才能工作?

c++ - 使用范围初始化 vector 与 lambda 内联初始化

c - 测量进程及其子进程的时间

c - GCC 按位属性

Java在线程内对同一变量上的指令重新排序

java - 新线程导致 ContextNotActiveException