Почему следующая программа printf «поток 1 существует» дважды в WSL2?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему следующая программа printf «поток 1 существует» дважды в WSL2?

Сообщение Anonymous »

В настоящее время я работаю над многопоточностью C++ в WSL2 и столкнулся с одной проблемой. При запуске моей программы я получаю дубликаты вывода printf из одного потока. Ниже представлена ​​программа, которую я запускаю:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

std::atomic g_Flag = 0;
std::atomic cnt = 0;

void worker1(std::future fut) {
printf("this is thread 1\n");
g_Flag = 1;
cnt++;
fut.get();
printf("thread 1 exists\n");
}

void worker2(std::promise prom) {
printf("this is thread 2\n");
g_Flag = 2;
cnt++;
prom.set_value(10);
printf("thread 2 exists\n");
}

using namespace std::chrono_literals;
int main() {
std::promise prom;
std::future fut = prom.get_future();
std::thread t1(worker1, std::move(fut));
std::thread t2(worker2, std::move(prom));
while (cnt.load() != 2) {

}
t1.detach();
t2.detach();
printf("main exists\n");
return 0;
}

Вывод программы:

Код: Выделить всё

eugene@DESKTOP-P8P395D:~/tron$ ./a.out
this is thread 1
this is thread 2
main exists
thread 2 exists
thread 1 exists
thread 1 exists
Как видите, он дважды печатает «поток 1 существует».
Есть какие-нибудь идеи о том, почему это может происходить? Я полагаю, что это может быть связано со средой WSL2, поскольку в обычных обстоятельствах я ожидаю, что каждый поток напечатает свое сообщение о выходе только один раз. Любая помощь или направление приветствуются. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/782 ... ce-in-wsl2
Ответить

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

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

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

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

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