---게임 서버--- 4

채팅 시스템 구현 - 전체 채팅

[[[구현]]]서버 연동 전아직은 내가 쓴 채팅만 나에게 보이는 상태소문자와 대문자를 구분해서 입력할 수 있으며 클라이언트 ID 함께 출력채팅창은 새로운 윈도우 창에 구현한다고 얼핏 들었던 것 같은데... 내가 사용한 방식은 사각형 하나 그려서 입력한 채팅을 그 안에 배치하도록 만들었다.정말 구리지만 일단은 서버랑 연결시키는걸 목표로 하자. 서버 연동 후이제 다른 클라이언트에서도 채팅 확인이 가능하다.내멋대로 구현해봤는데 실제 상용 게임에서는 어떤식으로 만드는지에 대한 정보와 이해가 필요하다.아마 DB 사용 채팅 서버 분리 등 여러가지 할 것이다. 정보를 계속 찾아보고 채팅창을 발전시켜 봐야겠다. 패킷 관련 소스코드 몇가지 올려보자면... [[[서론]]]온라인 게임 같은 경우 일반, 외치기, 귓속말, 길..

CAS 함수 사용

[[서론]]학습한 내용을 머릿속에 이미지로 체계화 시키기 위해 적은 글남들이 글을 읽고 이해하지 못해도 상관 없음 [[[내용]]]std::atomic_compare_exchange_strong 사용법을 알아보자 CAS는 특정 메모리 위치의 값을 검사하고 필요하면 새로운 값으로 변경하는 작업을 원자적으로 수행하는 함수다.여러 데이터가 동시에 같은 데이터를 수정하려고 할 때 발생하는 경합상태를 방지한다. [[[원리 분석]]][[함수]]: 1.CAS(NODE* volatile* ptr, NODE* old_p, NODE* new_p)===CAS 함수===NODE* volatile top / / 모든 쓰레드에서 접근 및 변경하므로 volatileNODE* my_top // fiexed_top이기 때문에 volat..

Lock Free Stack 구현

[[서론]]학습한 내용을 머릿속에 이미지로 체계화 시키기 위해 적은 글남들이 글을 읽고 이해하지 못해도 상관 없음 [[[내용]]]mutex를 사용하지 않고 cas를 사용하여 멀티쓰레드에서 atomic 하고 nonblocking한 stack 자료구조를 만든다.논블로킹이란 데이터를 바꾸는데 성공했든 실패했든 함수를 return하여 빠져나오고, 실패했다면 다시 시도하는 것이다.nonblocking한 자료구조를 만들려면 반드시 cas가 필요하다. 이것에 대한 증명은 이전 수업 때 완료되었다.ABA문제 때문에 delete를 하지 않고 자료구조를 구현할 것이다. [[[문제]]]1. Lock free하고 성격이 맞지 않는다. nonblocking으로 구현하기 위해 cas를 사용하고는 있지만 결국 어떤 쓰레드가 pus..

Coarse Stack 구현

[[서론]]학습한 내용을 머릿속에 이미지로 체계화 시키기 위해 적은 글남들이 글을 읽고 이해하지 못해도 상관 없음 [[[내용]]]무제한 성긴 동기화 스택이다.vector가 아니라 list로 구현하였다.멀티쓰레드에서 동작하는 컨테이너를 만들기 위하여 알고리즘에 lock을 걸어 동작시킨다  [[[문제]]] 알고리즘 전체에 lock을 걸에 코드가 쉽지만 블로킹 방식이고 병렬성이 없다. 쓰레드가 많아져도 속도가 빨라지긴 커녕 느려진다. [[[원리 분석]]][[클래스]]: 1. NODE, 2. STACK=== NODE 클래스 ===[멤버 변수]: int v, NODE* volatile next1. v는 스택에 집어넣을 값2. next는 이전 노드를 가리키는 포인터 // pop할 때 Top을 이전 노드에 위치시키기..