我正在尝试在 Visual C++ 中实现多线程、递归文件搜索逻辑。逻辑如下:线程 1,2 将从目录位置开始,并将目录中存在的文件与搜索条件进行匹配。如果他们找到子目录,他们会将其添加到工作队列中。一旦线程完成了目录中的文件,它就会从工作队列中获取另一个目录路径。工作队列是一个 STL Stack 类,由用于 push()、pop()、top() 调用的 CriticalSections 保护。
如果堆栈在任何时候为空,线程将在重试之前等待一分钟。此外,当所有线程都处于等待状态时,搜索被标记为完成。
这个逻辑没有任何问题,但我觉得我没有获得使用线程的全部潜力,因为与使用单线程相比没有显着的性能提升。我觉得工作堆栈是瓶颈,但无法弄清楚如何消除锁定部分。我尝试了另一种变体,其中每个线程将拥有自己的堆栈,并且仅当本地堆栈大小超过固定数量的工作项时,才会将工作项添加到全局堆栈。如果本地堆栈为空,线程将尝试从全局队列中获取。即使有这种变化,我也没有发现明显的差异。有没有人对改进同步逻辑有任何建议。
问候,