C# Lock syntax - 2 questions

后端 未结 3 628
醉梦人生
醉梦人生 2020-12-21 09:00

Can I use string as locker in the Lock ?

lock(\"something\")

Can I do lock without braces if its only one line ?

lock(\"som         


        
3条回答
  •  悲&欢浪女
    2020-12-21 09:13

    1) Yes, strings are (generally) interned (by default, thanks @Eric), so any instance of the same "something" would point to the same object, therefore you'd be ok. This is very bad practice though, because someone else, in another library for example, could lock on your string, thus giving the potential for deadlocks. See here: Using string as a lock to do thread synchronization

    You should do this:

    private static readonly object mutex = new object();
    
    lock(mutex)
    {
        //....
    }
    

    2) Yes, same with all statements. Anything* where you have:

    {
        // One line
    }
    

    could just be

    // One line
    

    *Almost anything, see @LukeH's example of the catch block, which requires the braces.

提交回复
热议问题