我有以下静态类和泛型方法,我想知道从不同的线程和不同的对象使用它是否安全?我不确定这是如何在封面下工作的,所以解释会有所帮助
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);
}
}
}
答案 0 :(得分:4)
线程唯一的问题是从不同的线程访问同一个对象而没有同步。
如果每个函数仅使用参数进行读取和局部变量,则它们不需要任何同步就是线程安全的。
答案 1 :(得分:1)
遵循惯例,静态方法应该是线程安全的,但实际上在v2中,静态api是默认实例上的实例方法的代理:在protobuf-net的情况下,它在内部最小化争用点,并且同步必要时的内部状态。基本上,图书馆不遗余力地做正确的事情,这样你就可以拥有简单的代码。