MethodImplOptions.Synchronized做了什么?

Ami*_*abh 52 .net multithreading

怎么MethodImplOptions.Synchronized办?

是下面的代码

[MethodImpl(MethodImplOptions.Synchronized)]
public void Method()
{
    MethodImpl();
}
Run Code Online (Sandbox Code Playgroud)

相当于

public void Method()
{
    lock(this)
    {
        MethodImpl();
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rab 47

Jon Skeet先生在另一个网站上回答了这个问题.

从邮报引用

这相当于将lock(this)放在整个方法调用上.

帖子有更多示例代码.

  • 这对于例如方法和属性来说是正确的,但对于静态的方法和属性,它会锁定类型,这与最佳实践相反(http://michaelprimeaux.com/blog/2008/01/09/methodimploptions-dot-synchronized/)实际上有一个已知的[x64系统上的bug](https://connect.microsoft.com/VisualStudio/feedback/details/423280/methodimpl-methodimploptions-synchronized-intermittently-throws-synchronizationlockexception-when-used-on-static-method -on-x64)导致抛出Object同步异常. (5认同)

Ric*_*ter 6

对于静态方法,它与以下内容相同:

public class MyClass
{
    public static void Method()
    {
        lock(typeof(MyClass))
        {
           MethodImpl();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

http://social.msdn.microsoft.com/Forums/en-US/b6a72e00-d4cc-4f29-a6a0-b27551f78b9b/methodimploptionssynchronized-vs-lock