AutoResetEvent
namespace ServerCore
{
class Lock
{
AutoResetEvent _avilable = new AutoResetEvent(true);
public void Acquire()
{
_avilable.WaitOne(); // 입장시도 들어가면 false로 바꿈
}
public void Release()
{
_avilable.Set(); // true로 바꿈
}
}
internal class Program
{
volatile static int _num = 0;
static Lock _lock = new Lock();
static void Thread_1()
{
for(int i = 0; i < 100000; i++)
{
_lock.Acquire();
_num++;
_lock.Release();
}
}
static void Thread_2()
{
for (int i = 0; i < 100000; i++)
{
_lock.Acquire();
_num--;
_lock.Release();
}
}
static void Main(string[] args)
{
Task t1 = new Task(Thread_1);
Task t2 = new Task(Thread_2);
t1.Start();
t2.Start();
Task.WaitAll(t1, t2);
Console.WriteLine(_num);
}
}
}