C# 这些方法是线程安全的吗?

C# 这些方法是线程安全的吗?,c#,generics,thread-safety,protobuf-net,C#,Generics,Thread Safety,Protobuf Net,我有以下带有泛型方法的静态类,我想知道从不同线程和不同对象使用它是否安全?我不确定这在封面下是如何工作的,所以解释一下 public static class Serialization { public static byte[] Serialize<T>(T obj) { using (var ms = new MemoryStream()) { Serializer.SerializeWithLengthP

我有以下带有泛型方法的静态类,我想知道从不同线程和不同对象使用它是否安全?我不确定这在封面下是如何工作的,所以解释一下

public static class Serialization
{
    public static byte[] Serialize<T>(T obj)
    {
        using (var ms = new MemoryStream())
        {
            Serializer.SerializeWithLengthPrefix<T>(ms, obj, PrefixStyle.Base128);
            return ms.ToArray();
        }
    }

    public static T DeSerialize<T>(byte[] bytes)
    {
        using (var ms = new MemoryStream(bytes))
        {
            return Serializer.DeserializeWithLengthPrefix<T>(ms, PrefixStyle.Base128);
        }
    }
}
公共静态类序列化
{
公共静态字节[]序列化(T obj)
{
使用(var ms=new MemoryStream())
{
Serializer.SerializeWithLengthPrefix(ms,obj,PrefixStyle.Base128);
返回ToArray女士();
}
}
公共静态T反序列化(字节[]字节)
{
使用(var ms=新内存流(字节))
{
返回Serializer.DeserializeWithLengthPrefix(ms,PrefixStyle.Base128);
}
}
}

线程的唯一问题是从不同的线程访问同一对象而不进行同步


如果每个函数只使用参数来读取和局部变量,那么它们不需要任何同步来保证线程安全

线程的唯一问题是在不同步的情况下从不同的线程访问同一对象


如果每个函数只使用参数来读取和局部变量,那么它们不需要任何同步来保证线程安全

它遵循静态方法应该是线程安全的约定,但实际上在v2中,静态api是默认实例上实例方法的代理:在protobuf-net的情况下,它在内部最小化争用点,并在必要时同步内部状态。基本上,库会不遗余力地做正确的事情,这样您就可以拥有简单的代码。

它遵循静态方法应该是线程安全的约定,但实际上在v2中,静态api是默认实例上实例方法的代理:在protobuf-net的情况下,它会在内部最小化争用点,并在必要时同步内部状态。基本上,这个库会不遗余力地把事情做好,这样你就可以得到简单的代码。

在我看来不错。你有什么特别的问题吗?没有什么明显的问题。如果在序列化obj时,另一个线程修改了obj,则会出现问题,与字节相同,但可能性要小得多。请查看更详细的解释。简而言之:静态方法在默认情况下是线程安全的,只要它们没有提交一些多线程巫术。看看protobuf文档,如果
序列化程序。SerializeWithLengthPrefix
序列化程序。反序列化WithLengthPrefix
是线程安全的,那么-是的,您的代码是线程安全的。注意:根据指导原则,静态方法应该是线程安全的,但是请更正确地检查:)@PTwr:根据约定,静态方法应该是线程安全的。不过,它并没有默认或自动的功能。但在这种情况下:是的,它们是线程安全的。在我看来很好。你有什么特别的问题吗?没有什么明显的问题。如果在序列化obj时,另一个线程修改了obj,则会出现问题,与字节相同,但可能性要小得多。请查看更详细的解释。简而言之:静态方法在默认情况下是线程安全的,只要它们没有提交一些多线程巫术。看看protobuf文档,如果
序列化程序。SerializeWithLengthPrefix
序列化程序。反序列化WithLengthPrefix
是线程安全的,那么-是的,您的代码是线程安全的。注意:根据指导原则,静态方法应该是线程安全的,但是请更正确地检查:)@PTwr:根据约定,静态方法应该是线程安全的。不过,它并没有默认或自动的功能。但在这种情况下:是的,它们是线程安全的。