← Back to context

Comment by gpderetta

10 hours ago

A mutex is a way to guarantee mutual exclusion nothing more nothing less; You can recover synchronous behaviour if you really want:

    synchronized<Something> something;
    ...
    co_await something.async_visit([&](Something& x) {
        /* critical section here */ 
    });

that isn't a mutex, that's delegating work asynchronously and delegating something else to run when it is complete (the implicitly defined continuation through coroutines).

In systems programming parlance, a mutex is a resource which can be acquired and released, acquired exactly once, and blocks on acquire if already acquired.

  • Do a CPS transform of your typical std::mutex critical section and you'll find they are exactly the same.

    • They're not, the interactions with the memory model are different, as are the guarantees.

      CPS shouldn't be able to deadlock for example?

      1 reply →