Size: a a a

2020 July 27

IZ

Ilia Zviagin in supapro.cxx
Vladimir Suisei
Можешь подробнее пояснить как это в этом случае может проявиться?
Это может проявиться как угодно
источник

К

Константин in supapro.cxx
это вроде как UB же
источник

AF

Aidar Fattakhov in supapro.cxx
Vladimir Suisei
Я понял как делать, мне интресены последствия если так не сделать в данном случае
Тебе нужна не атомарность
источник

AF

Aidar Fattakhov in supapro.cxx
Тебе нужны барьеры
источник

AF

Aidar Fattakhov in supapro.cxx
Ты изменил что-то
Поставил флаг в тру, с флагом все окей допустим
Но тебе нужен не флаг, флаг это лишь сигнал, ты хочешь потрогать что-то еще
источник

AF

Aidar Fattakhov in supapro.cxx
И вот это чтото еще не консистентно между потоками если бул не атомик
источник

AS

Anatoly Shirokov in supapro.cxx
Vladimir Suisei
Я понял как делать, мне интресены последствия если так не сделать в данном случае
компилятор может закэшировать значение твоей bool переменной
источник

TS

Till Schneider in supapro.cxx
Denis Paukaev
Это путь по граблям
не согласен. mutex/atomic нужен только там, где есть вероятность гонки
источник

AF

Aidar Fattakhov in supapro.cxx
Till Schneider
не согласен. mutex/atomic нужен только там, где есть вероятность гонки
Читай выше
источник

AS

Anatoly Shirokov in supapro.cxx
Anatoly Shirokov
#thread #logger Ребят, я здесь набросал логгер, который помогает анализировать многопоточные программы, за счет удобной визуализации лога каждого треда в виде отдельного столбца. Вообщем, для всех, кто изучает многопоточку и асинхрон будет полезно. https://gist.github.com/anatoly-spb/3e000186075efb7d05f078d42a5f9bf0

пример использования:
#include "pretty_thread_logger.h"

#include <condition_variable>
#include <iostream>
#include <mutex>
#include <thread>

namespace example
{
 std::mutex condvar_mutex;
 std::condition_variable condvar;
 bool product = false;

 void producer()
 {
   using namespace std::chrono_literals;
   pretty_thread_logger::info("producer enter");
   pretty_thread_logger::info("std::this_thread::sleep_for(2s);");
   std::this_thread::sleep_for(2s);
   pretty_thread_logger::info("std::lock_guard<std::mutex> guard{ condvar_mutex };");
   std::lock_guard<std::mutex> guard{ condvar_mutex };
   pretty_thread_logger::info("product = true;");
   product = true;
   pretty_thread_logger::info("condvar.notify_all();");
   condvar.notify_all();
   pretty_thread_logger::info("producer leave");
 }

 void consumer()
 {
   using namespace std::chrono_literals;
   pretty_thread_logger::info("consumer enter");
   pretty_thread_logger::info("std::unique_lock<std::mutex> exit_locker{ condvar_mutex };");
   std::unique_lock<std::mutex> locker{ condvar_mutex };
   pretty_thread_logger::info("condvar.wait");
   condvar.wait(locker, []()
     {
       return product;
     });
   pretty_thread_logger::info("consumer leave");
 }
 void test()
 {
   pretty_thread_logger::info("test enter");
   pretty_thread_logger::info("create producer");
   std::thread p{ producer };
   pretty_thread_logger::info("create consumer 1");
   std::thread c1{ consumer };
   pretty_thread_logger::info("create consumer 2");
   std::thread c2{ consumer };
   pretty_thread_logger::info("wait for producer done");
   p.join();
   pretty_thread_logger::info("wait for consumer 1 done");
   c1.join();
   pretty_thread_logger::info("wait for consumer 2 done");
   c2.join();
   pretty_thread_logger::info("test leave");
 }
}

int main() {
 example::test();
 pretty_thread_logger::set_thread_column_width(30);
 pretty_thread_logger::show(std::cout);
}
@suisei_v посмотри пример использования event driven, то о чем Айдар писал
источник

IZ

Ilia Zviagin in supapro.cxx
Константин
это вроде как UB же
Ну да
источник

DB

Dimmu Borgir in supapro.cxx
@anatolijs спасибо тебе бро) задание сделал так как ты посоветовал. Препод принял работу😊
источник

AS

Anatoly Shirokov in supapro.cxx
Dimmu Borgir
@anatolijs спасибо тебе бро) задание сделал так как ты посоветовал. Препод принял работу😊
честно, я не совсем помню что там, но здорово!
источник

DB

Dimmu Borgir in supapro.cxx
Anatoly Shirokov
честно, я не совсем помню что там, но здорово!
class UserManager {
public:
   User register(string login, string password);
   User authenticate(string login, string password);
...
}
источник

AS

Anatoly Shirokov in supapro.cxx
Dimmu Borgir
class UserManager {
public:
   User register(string login, string password);
   User authenticate(string login, string password);
...
}
а, ну ок
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Это путь по граблям
Смотря какие гарантии. Например если у нас доступ к общей переменной осуществляется
1) До создания потока из main потока
2) В созданном потоке
3) После join-а потока в main потоке

Тут не нужно больше никаких синхронизаций делать, join и конструктор потока создают нужную гарантию
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
Смотря какие гарантии. Например если у нас доступ к общей переменной осуществляется
1) До создания потока из main потока
2) В созданном потоке
3) После join-а потока в main потоке

Тут не нужно больше никаких синхронизаций делать, join и конструктор потока создают нужную гарантию
я в реальной жизни не видел таких сценариев
источник

ДВ

Даниил Ваденеев... in supapro.cxx
Всем привет!
Подскажите пожалуйста, как поправить проблему:
Вывожу в консоль через printf русские символы в терминале через CLion. Компилятор MingW, ОС Windows 10 EN. Изображаются в итоге символе в неправильной кодировке
//МАССИВЫ КАК АРГУМЕНТЫ ФУНКЦИИ
Вот  так.
Как вывести данные в правильной кодировке?
источник

D

Danya in supapro.cxx
Даниил Ваденеев
Всем привет!
Подскажите пожалуйста, как поправить проблему:
Вывожу в консоль через printf русские символы в терминале через CLion. Компилятор MingW, ОС Windows 10 EN. Изображаются в итоге символе в неправильной кодировке
//МАССИВЫ КАК АРГУМЕНТЫ ФУНКЦИИ
Вот  так.
Как вывести данные в правильной кодировке?
Как минимум не используй мингв
источник

/

/dev/desider in supapro.cxx
Danya
Как минимум не используй мингв
Почему? А что юзать для жсс на винде?
источник