MMOServer 25

Mutex(C++)

#include "pch.h"#include #include #include std::mutex m;std::vector v;void Push() { for (int i = 1; i  위의 코드는 Push라는 함수를 thread를 이용해서 실행하는 코드인데, 실행하면 error가 뜰 것이다.결론적으로 말하면 vector나 여러가지 자료구조는 Single Thread를 상정하고 만든 것이기 때문에 Multi Thread환경에서는 동작하면 여러가지 에러사항이 많다.  vector의 구현만 살펴봐도 v에 push_back을 하면 배열에 값을 복사하다가 배열의 크기가 가득차면 구현에 맞게 더 큰 배열을 만들고 원래 배열값들을 복사한 뒤에 원래 배열을 지우는데, Push의 함수가 동시에 실행되고 있다면, 한 쪽의..

MMOServer 2025.03.11

Atomic(C++)

#include "pch.h"#include #include atomic sum;void Add() { //sum++; sum.fetch_add(1);}void Sub() { //sum--; sum.fetch_sub(1);}int main(){ thread t1(Add); thread t2(Sub); t1.join(); t2.join(); std::cout  atomic은 원자성을 의미하며, All or Nothihg하게 적용되는 객체이다.c++에서 전역변수 sum은 section .data일 것이고, bss이기 떄문에 0으로 시작할텐데atomic없이 Add와 Sub함수를 thread를 사용해서 실행하고 sum을 출력하면 0이아닌 이상하게 연산된 값이 출력된다. sum++, sum--이 한줄로 고급언어로..

MMOServer 2025.03.11

Thread(C++)

#include "pch.h"#include void HelloThread() { cout v; for (int i = 0; i C++ 11부터 표준이된 를 사용해야 여러 운영체제에서 사용가능함.의 ::CreateThread는 windows용이고, Linux는 또 다르다. Thread.hardware_concurrency() : CPU의 논리 프로세서의 개수를 나타냄 즉 동시에 실행할 수 있는 thread 개수Thread.joinable() : thread의 id가 0인지를 확인함. 0이면 쓰레드를 사용할 수 없다Thread.join() : main thread가 끝나도 join()이 끝나지않으면 기다려줌.

MMOServer 2025.03.11