Я пытаюсь получить доступ к методу из нескольких потоков, я не уверен, что это потокобезопасный.Если это не так, каков будет самый эффективный способ сделать его безопасным?
Я учел мнение каждого, мой конечный продукт может быть показан ниже, я также решил вызвать recycle на самом пакете.
Мой класс пула пакетов
using System.Collections.Generic;
namespace Networking
{
public class PacketPool
{
private Queue<Packet> pool = new Queue<Packet>();
private readonly object instance = new object();
public Packet CreatePacket(string method)
{
lock (instance)
return pool.Count == 0 ? new Packet() { Pool = this } :
pool.Dequeue();
}
public void Recycle(Packet packet)
{
lock(instance)
pool.Enqueue(packet);
}
}
}
Класс пакета
using System;
using System.Net;
namespace Networking
{
public class Packet
{
public Protocol Proto = Protocol.Sequenced;
public PacketFlags Flag = PacketFlags.None;
public Fragment Fragmented = Fragment.NotFragged;
public SendType SendType = SendType.Raw;
public EndPoint RemoteEp = new IPEndPoint(IPAddress.Any, 0);
public byte[] Buffer = new byte[512];
public int Count = 0;
public int Ptr = 8;
public int Bits { get; set; } = 0;
public ushort Id = 0;
public ushort Lead = 0;
public PacketPool Pool;
public void Recycle()
{
Bits = 0;
if (Buffer.Length > 512)
Array.Resize(ref Buffer, 512);
Count = 0;
Flag = PacketFlags.None;
Fragmented = Fragment.NotFragged;
Proto = Protocol.Sequenced;
Ptr = 8;
Lead = 0;
SendType = SendType.Raw;
Pool.Recycle(this);
}
}
}
Надеясь, что решение, описанное выше, облегчит жизнь.