Подтвердить что ты не робот

Как заставить Google Test определить количество потоков в Linux?

При выполнении тестов смертности, написанных с использованием платформы Google Test, для каждого из тестов производится следующее предупреждение:

[WARNING] .../gtest-death-test.cc:789:: Death tests use fork(), which is unsafe
particularly in a threaded context. For this test, Google Test couldn't detect
the number of threads.

Есть ли способ заставить Google Test определить количество потоков в Linux?

4b9b3361

Ответ 1

Я посмотрел исходный код, и оказалось, что обнаружение количества потоков реализовано только для MacOS X и QNX, но не для Linux или других платформ. Поэтому я сам реализовал недостающую функциональность, подсчитав количество записей в /proc/self/task. Поскольку это может быть полезно для других, я публикую его здесь (я также отправил его в группу Google Test):

size_t GetThreadCount() {
  size_t thread_count = 0;
  if (DIR *dir = opendir("/proc/self/task")) {
    while (dirent *entry = readdir(dir)) {
      if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0)
        ++thread_count;
    }
    closedir(dir);
  }
  return thread_count;
}

По состоянию на 25 августа 2015 года Google Test реализует GetThreadCount в Linux:

size_t GetThreadCount() {
  const string filename =
      (Message() << "/proc/" << getpid() << "/stat").GetString();
  return ReadProcFileField<int>(filename, 19);
}

Ответ 2

Если вам не все равно о времени выполнения теста, удобной альтернативой является использование:

::testing::FLAGS_gtest_death_test_style = "threadsafe";

Подробнее здесь.