mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-15 14:54:09 +02:00
95 lines
1.6 KiB
Beef
95 lines
1.6 KiB
Beef
#pragma warning disable 168
|
|
|
|
using System;
|
|
using System.Threading;
|
|
using System.Diagnostics;
|
|
|
|
namespace IDETest
|
|
{
|
|
class HotSwap_TLS
|
|
{
|
|
class ClassA
|
|
{
|
|
[ThreadStatic]
|
|
public static int sTLS0;
|
|
|
|
/*ClassA_TLS1
|
|
[ThreadStatic]
|
|
public static int sTLS1;
|
|
*/
|
|
}
|
|
|
|
static Monitor sMonitor = new .() ~ delete _;
|
|
static WaitEvent sEvent = new .() ~ delete _;
|
|
static WaitEvent sDoneEvent = new .() ~ delete _;
|
|
static int sThreadResult;
|
|
|
|
public static int Inc0()
|
|
{
|
|
return ++ClassA.sTLS0;
|
|
}
|
|
|
|
public static int Inc1()
|
|
{
|
|
/*Inc1_TLS1
|
|
return ++ClassA.sTLS1;
|
|
*/
|
|
#unwarn
|
|
return -1;
|
|
}
|
|
|
|
public static void Thread0()
|
|
{
|
|
sEvent.WaitFor();
|
|
sThreadResult = Inc0();
|
|
sDoneEvent.Set();
|
|
|
|
sEvent.WaitFor();
|
|
sThreadResult = Inc0();
|
|
sDoneEvent.Set();
|
|
|
|
sEvent.WaitFor();
|
|
sThreadResult = Inc1();
|
|
sDoneEvent.Set();
|
|
|
|
sEvent.WaitFor();
|
|
sThreadResult = Inc1();
|
|
sDoneEvent.Set();
|
|
}
|
|
|
|
public static void Test()
|
|
{
|
|
//Test_Start
|
|
let thread = scope Thread(new => Thread0);
|
|
thread.Start(false);
|
|
|
|
int val = Inc0();
|
|
val = Inc0();
|
|
val = Inc0();
|
|
Debug.Assert(val == 3);
|
|
|
|
sEvent.Set();
|
|
sDoneEvent.WaitFor();
|
|
Debug.Assert(sThreadResult == 1);
|
|
|
|
sEvent.Set();
|
|
sDoneEvent.WaitFor();
|
|
Debug.Assert(sThreadResult == 2);
|
|
|
|
val = Inc1();
|
|
val = Inc1();
|
|
val = Inc1();
|
|
NOP!();//Debug.Assert(val == 3);
|
|
|
|
sEvent.Set();
|
|
sDoneEvent.WaitFor();
|
|
NOP!();//Debug.Assert(sThreadResult == 1);
|
|
|
|
sEvent.Set();
|
|
sDoneEvent.WaitFor();
|
|
NOP!();//Debug.Assert(sThreadResult == 2);
|
|
|
|
thread.Join();
|
|
}
|
|
}
|
|
}
|