멀티스레드프로그래밍
-
TLS(Thread Local Storage)C++/C++ 멀티스레드 2022. 11. 8. 20:47
안녕하세요. 오늘은 Thread Local Storage에 대해서 알아보겠습니다. 개념 게임을 만드는 예를 들어볼게요. 멀티스레드 환경에서 스레드들은 DB관리도 하고, 클라이언트 세션을 처리하기도 하고, 게임로직을 처리하기도 하는 등 다양한 작업을 처리하게 됩니다. 그런데, 이 스레드들은 우리가 생각하는 것처럼 이상적으로 동작하지 않습니다. 우리는 스레드가 공평하게 여러 작업에 투입되길 바라는데 현실은 한, 두개의 작업에 많은 스레드가 몰리게 됩니다. 멀티스레드 프로그래밍의 이상과 현실이라고 유명한 사진이 있습니다. 여튼 이렇게 하나의 작업에 여러 스레드가 몰리게 되면 비효율적인 상황이 발생합니다. Lock때문인데요. 멀티스레드 환경에서는 특정 작업을 처리할 때 Lock을 걸고 작업을 하는 경우가 많습니..
-
C++ 멀티스레드 동기화, 이벤트 사용법C++/C++ 멀티스레드 2022. 10. 12. 20:38
저번 시간까지 멀티스레드 환경에서 lock을 기다릴 때 사용할 수 있는 방법으로 두 가지를 알아보았습니다. 1. spinlock(무한정대기) 2. sleep(랜덤한 시간동안 대기) 이번에는 3번째 방법인 이벤트를 사용하는 방법에 대해서 알아보도록 하겠습니다. 저번에 들었던 헬스장 예시를 다시 들어볼게요. 사용하고 싶은 헬스기구를 다른 사람이 사용하고 있다. 나는 헬스기구에 자리가 나면 사용할 예정이다. 1. spinlock은 기구 뒤에서서 무작정 기다리는 방법이고 2. sleep은 일정시간동안 다른 곳에서 기다리다가 자리가 났는지 확인하는 방법입니다. 세 번째방법인 이벤트 방법은 이런겁니다. 어이~ 김비서! 나 밖에서 쉬고있을테니까 여기 자리나면 나한테 알려줘! 이 개념을 C++에서 나타내면 다음과 같이..