//----------------------------------------------------------------------- // ----------------------------------------------------------------------- // file="Program.cs" // Project: StgSharp // AuthorGroup: Nitload Space // Copyright (c) Nitload Space. All rights reserved. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the “Software”), to deal in the Software without restriction, // including without limitation the rights to use, copy, modify, merge, // publish, distribute, sublicense, and/or sell copies of the Software, // and to permit persons to whom the Software is furnished to do so, // subject to the following conditions: // // The above copyright notice and // this permission notice shall be included in all copies // or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED “AS IS”, // WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, // ARISING FROM, OUT OF OR IN CONNECTION WITH // THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- using StgSharp.Collections; using StgSharp.Controlling.UsrActivity; using StgSharp.Geometries; using StgSharp.Graphics; using StgSharp.HighPerformance.Memory; using StgSharp.Mathematics; using StgSharp.Model.Step; using StgSharp.MVVM; using StgSharp.MVVM.ViewModel; using StgSharp.Script; using StgSharp.Script.Express; using System; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; using System.Threading; using System.Xml.XPath; namespace StgSharp { internal static partial class Program { private static string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp"; internal static unsafe void Main(string[] args) { try { World.Init(); // HLSF test arena Console.WriteLine( "=== HLSF (Hybrid Layer Segregated Fit Allocator) Multi-threaded Test Arena ===\n"); HybridLayerSegregatedFitAllocator hlsfAllocator = new HybridLayerSegregatedFitAllocator(1024 * 1024 * 4); int threadCount = 4; int blocksPerThread = 1024; int blockSize = 1024; Thread[] threads = new Thread[threadCount]; for (int t = 0; t < threadCount; t++) { threads[t] = new Thread(() => { int threadIndex = Environment.CurrentManagedThreadId; Stack handles = new(); // Allocate blocks for (int i = 0; i < blocksPerThread; i++) { Console.WriteLine($"Thread {threadIndex}: Allocating block {i}."); handles.Push(hlsfAllocator.Alloc((uint)blockSize)); } // Free blocks while (handles.TryPop(out HybridLayerSegregatedFitAllocationHandle handle)) { Console.WriteLine($"Thread {threadIndex}: Freeing a block."); hlsfAllocator.Free(handle); } Console.WriteLine($"Thread {threadIndex}: All blocks allocated and freed."); }); } // Start all threads foreach (Thread thread in threads) { thread.Start(); } // Wait for all threads to complete foreach (Thread thread in threads) { thread.Join(); } Console.WriteLine("All threads completed successfully."); } catch (Exception ex) { Console.WriteLine(ex); /* World.WriteLog($"{ex}", LogType.Error); if( true ) { } Dialogue.PostError( ex ); /**/ World.Terminate(-1); /**/ } finally { World.Terminate(0); } } } }