Skip to content

Instantly share code, notes, and snippets.

@jkotas
Created August 15, 2023 01:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkotas/617109b64d9b0ad52b491cdf021b2f8a to your computer and use it in GitHub Desktop.
Save jkotas/617109b64d9b0ad52b491cdf021b2f8a to your computer and use it in GitHub Desktop.
RW metadata lock contention
using System.Runtime.CompilerServices;
class Test
{
static int count = 0;
static void Main()
{
for (int i = 0; i < Environment.ProcessorCount; i++)
new Thread(Work).Start();
for (;;)
{
int previous = count;
Thread.Sleep(1000);
Console.WriteLine(count-previous);
}
}
static void Work()
{
for (;;)
{
try
{
M0();
}
catch (Exception e)
{
Interlocked.Increment(ref count);
e.ToString();
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)] static void M0() => M1();
[MethodImpl(MethodImplOptions.NoInlining)] static void M1() => M2();
[MethodImpl(MethodImplOptions.NoInlining)] static void M2() => M3();
[MethodImpl(MethodImplOptions.NoInlining)] static void M3() => M4();
[MethodImpl(MethodImplOptions.NoInlining)] static void M4() => M5();
[MethodImpl(MethodImplOptions.NoInlining)] static void M5() => M6();
[MethodImpl(MethodImplOptions.NoInlining)] static void M6() => M7();
[MethodImpl(MethodImplOptions.NoInlining)] static void M7() => M8();
[MethodImpl(MethodImplOptions.NoInlining)] static void M8() => M9();
[MethodImpl(MethodImplOptions.NoInlining)] static void M9() => M10();
[MethodImpl(MethodImplOptions.NoInlining)] static void M10() => M11();
[MethodImpl(MethodImplOptions.NoInlining)] static void M11() => M12();
[MethodImpl(MethodImplOptions.NoInlining)] static void M12() => M13();
[MethodImpl(MethodImplOptions.NoInlining)] static void M13() => M14();
[MethodImpl(MethodImplOptions.NoInlining)] static void M14() => M15();
[MethodImpl(MethodImplOptions.NoInlining)] static void M15() => M16();
[MethodImpl(MethodImplOptions.NoInlining)] static void M16() => M17();
[MethodImpl(MethodImplOptions.NoInlining)] static void M17() => M18();
[MethodImpl(MethodImplOptions.NoInlining)] static void M18() => M19();
[MethodImpl(MethodImplOptions.NoInlining)] static void M19() => M20();
[MethodImpl(MethodImplOptions.NoInlining)] static void M20() => M21();
[MethodImpl(MethodImplOptions.NoInlining)] static void M21() => M22();
[MethodImpl(MethodImplOptions.NoInlining)] static void M22() => M23();
[MethodImpl(MethodImplOptions.NoInlining)] static void M23() => M24();
[MethodImpl(MethodImplOptions.NoInlining)] static void M24() => M25();
[MethodImpl(MethodImplOptions.NoInlining)] static void M25() => M26();
[MethodImpl(MethodImplOptions.NoInlining)] static void M26() => M27();
[MethodImpl(MethodImplOptions.NoInlining)] static void M27() => M28();
[MethodImpl(MethodImplOptions.NoInlining)] static void M28() => M29();
[MethodImpl(MethodImplOptions.NoInlining)] static void M29() => M30();
[MethodImpl(MethodImplOptions.NoInlining)] static void M30() => M31();
[MethodImpl(MethodImplOptions.NoInlining)] static void M31() => M32();
[MethodImpl(MethodImplOptions.NoInlining)] static void M32() => M33();
[MethodImpl(MethodImplOptions.NoInlining)] static void M33() => M34();
[MethodImpl(MethodImplOptions.NoInlining)] static void M34() => M35();
[MethodImpl(MethodImplOptions.NoInlining)] static void M35() => M36();
[MethodImpl(MethodImplOptions.NoInlining)] static void M36() => M37();
[MethodImpl(MethodImplOptions.NoInlining)] static void M37() => M38();
[MethodImpl(MethodImplOptions.NoInlining)] static void M38() => M39();
[MethodImpl(MethodImplOptions.NoInlining)] static void M39() => M40();
[MethodImpl(MethodImplOptions.NoInlining)] static void M40() => M41();
[MethodImpl(MethodImplOptions.NoInlining)] static void M41() => M42();
[MethodImpl(MethodImplOptions.NoInlining)] static void M42() => M43();
[MethodImpl(MethodImplOptions.NoInlining)] static void M43() => M44();
[MethodImpl(MethodImplOptions.NoInlining)] static void M44() => M45();
[MethodImpl(MethodImplOptions.NoInlining)] static void M45() => M46();
[MethodImpl(MethodImplOptions.NoInlining)] static void M46() => M47();
[MethodImpl(MethodImplOptions.NoInlining)] static void M47() => M48();
[MethodImpl(MethodImplOptions.NoInlining)] static void M48() => M49();
[MethodImpl(MethodImplOptions.NoInlining)] static void M49() => M50();
[MethodImpl(MethodImplOptions.NoInlining)] static void M50() => M51();
[MethodImpl(MethodImplOptions.NoInlining)] static void M51() => M52();
[MethodImpl(MethodImplOptions.NoInlining)] static void M52() => M53();
[MethodImpl(MethodImplOptions.NoInlining)] static void M53() => M54();
[MethodImpl(MethodImplOptions.NoInlining)] static void M54() => M55();
[MethodImpl(MethodImplOptions.NoInlining)] static void M55() => M56();
[MethodImpl(MethodImplOptions.NoInlining)] static void M56() => M57();
[MethodImpl(MethodImplOptions.NoInlining)] static void M57() => M58();
[MethodImpl(MethodImplOptions.NoInlining)] static void M58() => M59();
[MethodImpl(MethodImplOptions.NoInlining)] static void M59() => M60();
[MethodImpl(MethodImplOptions.NoInlining)] static void M60() => M61();
[MethodImpl(MethodImplOptions.NoInlining)] static void M61() => M62();
[MethodImpl(MethodImplOptions.NoInlining)] static void M62() => M63();
[MethodImpl(MethodImplOptions.NoInlining)] static void M63() => M64();
[MethodImpl(MethodImplOptions.NoInlining)] static void M64() => M65();
[MethodImpl(MethodImplOptions.NoInlining)] static void M65() => M66();
[MethodImpl(MethodImplOptions.NoInlining)] static void M66() => M67();
[MethodImpl(MethodImplOptions.NoInlining)] static void M67() => M68();
[MethodImpl(MethodImplOptions.NoInlining)] static void M68() => M69();
[MethodImpl(MethodImplOptions.NoInlining)] static void M69() => M70();
[MethodImpl(MethodImplOptions.NoInlining)] static void M70() => M71();
[MethodImpl(MethodImplOptions.NoInlining)] static void M71() => M72();
[MethodImpl(MethodImplOptions.NoInlining)] static void M72() => M73();
[MethodImpl(MethodImplOptions.NoInlining)] static void M73() => M74();
[MethodImpl(MethodImplOptions.NoInlining)] static void M74() => M75();
[MethodImpl(MethodImplOptions.NoInlining)] static void M75() => M76();
[MethodImpl(MethodImplOptions.NoInlining)] static void M76() => M77();
[MethodImpl(MethodImplOptions.NoInlining)] static void M77() => M78();
[MethodImpl(MethodImplOptions.NoInlining)] static void M78() => M79();
[MethodImpl(MethodImplOptions.NoInlining)] static void M79() => M80();
[MethodImpl(MethodImplOptions.NoInlining)] static void M80() => M81();
[MethodImpl(MethodImplOptions.NoInlining)] static void M81() => M82();
[MethodImpl(MethodImplOptions.NoInlining)] static void M82() => M83();
[MethodImpl(MethodImplOptions.NoInlining)] static void M83() => M84();
[MethodImpl(MethodImplOptions.NoInlining)] static void M84() => M85();
[MethodImpl(MethodImplOptions.NoInlining)] static void M85() => M86();
[MethodImpl(MethodImplOptions.NoInlining)] static void M86() => M87();
[MethodImpl(MethodImplOptions.NoInlining)] static void M87() => M88();
[MethodImpl(MethodImplOptions.NoInlining)] static void M88() => M89();
[MethodImpl(MethodImplOptions.NoInlining)] static void M89() => M90();
[MethodImpl(MethodImplOptions.NoInlining)] static void M90() => M91();
[MethodImpl(MethodImplOptions.NoInlining)] static void M91() => M92();
[MethodImpl(MethodImplOptions.NoInlining)] static void M92() => M93();
[MethodImpl(MethodImplOptions.NoInlining)] static void M93() => M94();
[MethodImpl(MethodImplOptions.NoInlining)] static void M94() => M95();
[MethodImpl(MethodImplOptions.NoInlining)] static void M95() => M96();
[MethodImpl(MethodImplOptions.NoInlining)] static void M96() => M97();
[MethodImpl(MethodImplOptions.NoInlining)] static void M97() => M98();
[MethodImpl(MethodImplOptions.NoInlining)] static void M98() => M99();
[MethodImpl(MethodImplOptions.NoInlining)] static void M99() => throw new Exception();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment