Я не уверен в том, что происходит. Я пытался создать простой повторяемый проект, но проблема возникает только на кодовой базе, которой я не могу поделиться. < /P>
для возобновления. Мой проект использует несколько тестирования Google. Один из них использует Coroutine и Std :: Thread: < /p>
(этот код исходит из моей попытки воспроизвести в простом примере) < /p>
void WaitForCoro(std::list &t) {
bool can_break = false;
while (!can_break) {
sleep(1);
can_break = true;
for (auto &c : t) {
if (!c.Done()) {
can_break = false;
break;
}
}
}
}
Coro CreateCoro(int e) {
co_await std::suspend_never();
co_await std::suspend_never();
co_return e;
}
TEST(Test, one) {
std::list my_list;
my_list.emplace_back(std::move(CreateCoro(1)));
my_list.emplace_back(std::move(CreateCoro(2)));
std::thread t1 = std::thread{WaitForCoro, std::ref(my_list)};
t1.join();
ASSERT_TRUE(true);
}
< /code>
При составлении ссылки будет идти навсегда: < /p>
-- The C compiler identification is GNU 14.2.1
-- The CXX compiler identification is GNU 14.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (0.2s)
-- Generating done (0.0s)
-- Build files have been written to: /home/user/code/project/out
[0/2] Re-checking globbed directories...
[16/18] Linking CXX executable unit_tests
Если я прокомментирую t1.join () в коде. Затем он скомпилируется и ссылается нормально. У меня есть еще несколько тестирования, которые используют поток, но не с Coroutine, и он тоже работает нормально. < /P>
Если вам интересно. Ссылка не потребляет больше памяти и процессоров, чем обычно, и у меня более чем достаточно оперативной памяти, чтобы процесс прошел нормально. < /P>
Я понятия не имею, что происходит. Может быть, это даже не связано с нитью и неровью. У вас есть идеи, чтобы помочь решить эту проблему? Наилучшим образом
Подробнее здесь: https://stackoverflow.com/questions/794 ... on-linking