Ok, finally after hours of research and coding, I think I have a thread safe code. Maybe?
Here, Am I doing anything stupid here?
namespace Engine.AI.Pathfinding
{
public static class AstarManager
{
static Thread UpdateThread = new Thread(new ThreadStart(Update));
static ConcurrentQueue<Astar> AstarQueue = new ConcurrentQueue<Astar>();
public static Queue<Astar> AstarResults = new Queue<Astar>();
public static void Initialize()
{
UpdateThread.IsBackground = true;
UpdateThread.Priority = ThreadPriority.Highest;
if(!UpdateThread.IsAlive)
UpdateThread.Start();
}
public static void AddNewPath(Node StartingNode, Node TargetNode, Map map, bool DisableDiagonalPathfinding)
{
AstarQueue.Enqueue(new Astar(StartingNode, TargetNode, map, DisableDiagonalPathfinding));
}
static void Update()
{
while (true)
{
for (int i = 0; i < AstarQueue.Count; i++)
{
Astar TempAstar;
AstarQueue.ToList()[i].FindPath();
AstarQueue.TryDequeue(out TempAstar);
AstarResults.Enqueue(TempAstar);
Thread.Sleep(5);
}
}
}
}
}