본문 바로가기
반응형

서버11

ReaderWriterLock 구현 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Systehttp://m.Threading.Tasks;namespace SeverCore {     //재귀적 락을 허용할지 (NO) WriteLock->WriteLock Ok, WriteLock->ReadLock OK, ReadLock ->WriteLock NO     //스핀락 정책(5000번 ->Yield     internal class Lock     {         const int EMPTY_FLAG = 0x00000000;         const int WRITE_MASK = 0x7FFF0000;         const i.. 2024. 8. 6.
ReaderWriterLock using System; using System.Threading; using Systehttp://m.Threading.Tasks;namespace ServerCore {     class Program     {         //1.근성         //2.양보         //3.갑질         //Monitor         static object _lock = new object();         static SpinLock _lock2 = new SpinLock();         static Mutex _lock3 = new Mutex();//무겁고 느리다         //RWLock ReaderWriteLock         static ReaderWriterLockSlim .. 2024. 8. 6.
AutoResetEvent using System; using System.Threading; using Systehttp://m.Threading.Tasks;namespace ServerCore {     class Lock     {         //bool         AutoResetEvent _available = new AutoResetEvent(true);         //ManualResetEvent _available = new ManualResetEvent(true);         public void Acquire()         {             _available.WaitOne();//입장 시도              //_available.Reset(); //bool =false;문을 닫는.. 2024. 8. 6.
Context Switching using System; using System.Threading; using Systehttp://m.Threading.Tasks;namespace ServerCore {     class SpinLock     {         volatile int  _locked = 0;         public void Acquire()         {             int expected = 0;             int desired = 1;             while (true)             {                 /*int original =  Interlocked.Exchange(ref _locked, 1);                 if (original ==.. 2024. 8. 6.
SpinLock using System; using System.Threading; using Systehttp://m.Threading.Tasks;namespace ServerCore {     class SpinLock     {         bool _locked = false;         public void Acquire()         {             while(_locked)             {                 //잠김이 풀리기를 기다린다.             }             _locked = true;         }         public void Release()         {             _locked = false;         }  .. 2024. 7. 30.
DeadLock namespace SeverCore {     class SessionManager     {         static object _lock = new object();         public static void TestSession()         {             lock (_lock)             {             }         }         public static void Test()          {             lock(_lock)             {                 UserManager.TestUser();             }         }     }     class UserManager     {       .. 2024. 7. 30.
Lock 기초 namespace SeverCore {     internal class Program     {         static int number = 0;         static object _obj = new object();         static void Thread_1()         {             for (int i = 0; i             {                 //상호 배제 Mutual Exclusive                 Monitor.Enter(_obj);//문을 잠구는 행위                  number++;                 Monitor.Exit(_obj);//잠금 해제              }         } .. 2024. 7. 30.
메모리 배리어 namespace SeverCore {     internal class Program     {         //메모리 배리어         //A)코드 재배치 억제         //B) 가시설                   //1) Full Memory Barrier (ASM MFENCE, C$ Thread.MemoryBarrier) : Store/ Load 둘 다 막는다         //2) Store Memory Barrier(ASM SFENCE) : Store만 막는다         //3) Load Memory Barrier( ASM LFENCE) : Load만 막는다         static int x = 0;         static int y = 0;         static.. 2024. 7. 26.
디버그 최적화 namespace SeverCore {     internal class Program     {         volatile static bool _stop = false;         static void ThreadMain()         {             Console.WriteLine("쓰레드 시작");             while (!_stop)             {                 //누군가 stop 신호를 해주기 기다린다             }             Console.WriteLine("쓰레드 종료");         }         static void Main(string[] args)         {             Task t .. 2024. 7. 26.
캐시 1) TEMPORAL LOCALITY시간적으로 보면, 방금 주문한 테이블에서 추가 주문이 나올 확률이 높다.방금 주문한걸 메모해 놓으면 편하지 않을까?2) SPACIAL LOCALITY공간적으로 보면, 방금 주문한 사람 근처에 있는 사람이 추가 주문을 할 확률이 높다. 방금 주문한 사람과 합석하고 있는 사람들의 주문 목록도 메모해 놓으면 편하지 않을까? 2024. 7. 26.
멀티쓰레드 Thread t = new Thread(MainThred);//쓰레드 생성 t.Name = "Test Thread";//쓰레드 이름 지정 t.IsBackground = true;//백그라운드  t.Start();//쓰레드 시작 t.Join();//쓰레드가 끝날때 까지 기다린다  ThreadPool.QueueUserWorkItem(MainThred);//백그라운드로 돌아가는 쓰레드  ThreadPool.SetMinThreads(1, 1);//최소 쓰레드 갯수 ThreadPool.SetMaxThreads(5, 5);//최대 쓰레드 갯수for (int i = 0; i {      ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); } ThreadPool.. 2024. 7. 26.
반응형