A saw this on Mastodon, and found it interesting. Rust already prevents a lot of race conditions, but deadlocks when using a mutex is still possible (and I have actually had one myself, though I caught it during testing). So, it would be nice if it would be possible to catch these cases at compile time. Now, seems to be just a proof of concept, but it is always nice to see the direction people are going and what areas are explored.

  • Miaou@jlai.lu
    link
    fedilink
    arrow-up
    1
    ·
    10 months ago

    I’m a bit confused by the need for the thread key. This makes me think I don’t understand what problem this is supposed to solve. Does this crate do something more than what c++'s scoped lock offers?

    • blackjacksepp@feddit.de
      link
      fedilink
      arrow-up
      3
      ·
      10 months ago

      I never used C++'s scoped locks but as far as I can tell they perform runtime deadlock detection while this crate is compile-time only with near to none code produced in the resulting binary.

      This is done by enforcing to either lock every Mutex the thread needs at once or none at all. Thread keys are used to represent this with the type system.

      • naonintendois@programming.dev
        link
        fedilink
        arrow-up
        5
        ·
        10 months ago

        I don’t see how that can be used to make performant code though. I usually want to make my locked regions as small as possible to avoid how long other threads are blocked for.

      • Miaou@jlai.lu
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        10 months ago

        So this is solving the problem of reentrant deadlocks, with a non compile-time enforceable exclusion mechanism in the form of a threadkey.

        It’s quite different from solving deadlocks in general, and mostly moves the problem to getting the thread key. It’s an interesting thought experiment, but unless I’m missing something else, it has no practical purpose over a try_lock.

        But anyway, thanks for taking the time to explain, I should have read more carefully