Hlavní navigace

Názor ke článku Sdílení objektů mezi vlákny v C++20 (II) od Ondřej Novák - Teď nechápu "jak vůbec nemá". V původním návrh...

  • 26. 4. 2024 11:45

    Ondřej Novák

    Teď nechápu "jak vůbec nemá". V původním návrh samozřejmě šipka je


    namespace std
    {
    template<typename T>
    class synchronized_value
    {
    public:
    synchronized_va­lue(synchroni­zed_value const&) = delete;
    synchronized_value& operator=(syn­chronized_value const&) = delete;

    template<typename ... Args>
    synchronized_va­lue(Args&& ... args);
    ~synchronized_va­lue();

    template<typename F>
    auto apply(F&& func) -> typename std::result_of<F(T&)>:­:type;

    unspecified operator->();
    unspecified operator*();
    };
    }

    Odpověď na první otázku bys našel v tom videu. Mají tam něco čemu říkají "update_guard", který zamkne objekt na dobu, kdy je guard aktivní. Já to tak nemám, protože podobnou funkcionalitu zařídí právě metody lock() a lock_shared()


    auto guard = sync_object.lock();
    guard->method1();
    guard->method2();

    Sám si nejsem jist, co je lepší řešení.

    Jinak z hlediska návrhu kódu, trochu bych se ohradil proti myšlence, že chci nějakou činnost objektu realizovat sekvenčním voláním několika metod. Objekt navrhuju primárně tak, aby metoda = transakce. To jen na okraj.