Использование std :: thread :: join () Сделайте процесс компиляции, чтобы заблокировать привязываниеLinux

Ответить
Anonymous
 Использование std :: thread :: join () Сделайте процесс компиляции, чтобы заблокировать привязывание

Сообщение Anonymous »

Я не уверен в том, что происходит. Я пытался создать простой повторяемый проект, но проблема возникает только на кодовой базе, которой я не могу поделиться. < /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»