Я не уверен в том, что происходит. Я пытался создать простой повторяемый проект, но проблема возникает только на кодовой базе, которой я не могу поделиться. < /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
Использование std :: thread :: join () Сделайте процесс компиляции, чтобы заблокировать привязывание ⇐ Linux
1739043440
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>
Я понятия не имею, что происходит. Может быть, это даже не связано с нитью и неровью. У вас есть идеи, чтобы помочь решить эту проблему? Наилучшим образом
Подробнее здесь: [url]https://stackoverflow.com/questions/79423810/using-stdthreadjoin-make-compilation-process-to-block-on-linking[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия