stxxl超过线程数的操作系统限制

时间:2018-10-23 10:49:33

标签: c++ multithreading stxxl

在Windows 10 / VS2015上为STXXL 1.4.1。

我有一些代码实际上是在其中使用的:

typedef stxxl::vector<RC, 4, stxxl::lru_pager<8>, 2 * 1024> TVector;
typedef stxxl::deque<RC, TVector> CellIndexList;

这是为了将块大小从默认值2 * 1024 * 1024减小;我必须这样做,因为我有

std::vector<CellIndexList> list(400);

并且由于默认的stxxl :: vector分配了约60MB的缓冲区,因此我的向量中有60 * 400 MB的内存,该内存因bad_alloc(32位)而崩溃-因此,这就是我进入当前设置的方式。

以此为背景,我现在遇到的是我的代码因以下stxxl诊断而崩溃:

[STXXL-ERRMSG] Exception thrown in ~vector()

当我向stxxl :: vector ::〜vector()添加一些其他诊断程序时,我得到以下信息:

Dynamic exception type: class std::system_error
std::exception::what: resource unavailable try again: resource unavailable try again

因此,stxxl :: vector析构函数中的flush()失败,出现此异常;从谷歌搜索看来,此异常意味着已达到最大线程数。

现在我正在努力理解为什么在进行flush()时为什么会创建额外的线程。我查看了stxxl源代码,发现了一些关于不同类型磁盘队列的提及,并且我还尝试在define.h中启用STXXL_HACK_SINGLE_IO_THREAD,但是所有这些都只是在尝试随机操作,因为我缺乏概述stxxl在什么目的和什么情况下创建多少个线程。

我也尝试过提出一个独立的问题,该问题会出现此问题,但失败了;我可以轻松做到

std::vector<CellIndexList> d(10000);

并为它们填充大量数据而不会出现问题。因此,对于在我的实际代码中使用导致问题的线程的方式,必须有一些具体说明。太大了,无法开始解决问题,直到我解决问题为止。

所以,我的问题是:stxxl中是否有任何地方可能在创建大量线程?我还能在这里找到其他问题吗?

0 个答案:

没有答案