这些方法是否安全?

时间:2013-12-31 22:09:10

标签: c# generics thread-safety protobuf-net

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

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);
        }
    }
}

2 个答案:

答案 0 :(得分:4)

线程唯一的问题是从不同的线程访问同一个对象而没有同步。

如果每个函数仅使用参数进行读取和局部变量,则它们不需要任何同步就是线程安全的。

答案 1 :(得分:1)

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