하나의 프로그램은 기본적으로 하나의 스레드를 가지고 있지요. 해당 스레드가 실제로 코어를 할당받아 코드를 실행한다고 알고있습니다. 선점형 운영체제인 윈도우에서는 어쩔 수 없이 타임 슬라이스 만큼 스레드에 CPU 코어를 할당하고 회수해 간다는 것으로 알고있는데요. 그렇다면 스레드는 현재까지 실행한 코드 프로그램 카운터와 같은 다양한 레지스터 값을 저장하는 자료구조 정도로 이해하는 것이 옳은것인지요 ? 각 프로그램 마다 코드를 실행하는 스레드에서 각 코어를 할당받았을 때 실행해야 할 주소 번지를 저장하고 있어야 되니까 이렇게 추론을 해봤는데... 어떻게 접근하는게 옳은지 알고싶습니다.
atomic연산에 한해, 모든 쓰레드가 동일 객체에 대해서 동일한 수정 순서를 관찰하는 말이.. 0,2,3,39,9,10,7 순서로 다중쓰레드를 이용해서 바뀔 A데이터가 있을때 마지막 A데이터를 이용했을때가 2인상황에서 몇프레임지난후 현재상황에서 A데이터를 변경해준 쓰레드들중 마지막에 9라는 값을 넣어줬주고 A데이터의 값을확인하면 무조건 9라는 값이 나오는것이 아닌 2이후 3,39,9중 하나가 나올수있다는 건가요?
제목과 같습니다. mutex 라이브러리를 이용한 강의 내용의 mutex m은 기본적으로 busy waiting이라고 말할 수 있나요? 뒷 강의 내용에서 나오는 mutex 변수를 Spinlock 구조로 되어있다고 이해해도 문제가 없는걸까요? (강의내용 11분 50초경) 이번 강의에서 t1과 t2가 Push를 하게 될때, 만약 t1이 lock을 붙잡고 있으면, t2는 Context Switching 이라거나 Event 방식으로 기다리지 않고 Busy waiting 하는것인지 궁금해서 문의 남깁니다. 제가 구글링을 통해 찾아본 해외 자료 느낌에서는 윈도우 환경과 VS에서 코딩하는 경우 Busy waiting을 하지 않는것처럼 나오는데, 만약 그렇다면 이것이 뒷 강의에서 설명하는 Lock 구현 방식중 2번의 Context Switching인건지 3번의 Event 방식인지도 궁금합니다.
wsasend가 멀티쓰레드환경을 보장하지 않아 lock을 걸어준다고 하셨는데 어떤부분을 보장하지 않는 건가요? 버퍼문제라면 혹시 이번 수업의 코드는 임시로 event마다 독립적인 버퍼를 가지게 했으니 lock을 안걸어주어도 되나요? wsarecv 는 멀티쓰레드환경에서 문제가 발생하지 않나요?
조금 이해를 못한 부분이 있습니다. while문을 돌면서 WSAWaitForMultipleEvents에 도달했을 때 timeout 조건을 WSA_INFINITE로 걸게 되면 이 지점에서 block되는 것과 같아지나요? 그러면 비동기 논블락 소켓을 사용하는 이점이 사라지게 되는 것인지 문득 궁금해졌습니다. 더불어서 혹시 취업 특강은 다음 주에 나오는걸까요..? ㅎㅎ
수업을 듣고 코드 분석하다가 질문드립니다. 이게 명확한 차이가 구분이 안가서 그런데 -Send -ProcessSend -RegisterSend -OnSend (이건 Send 완료시로 알고있는데 맞나요?) 간의 어떤 차이가 있나요? 그리고 제가 코딩 실력이 부족해서 그런데 하나의 큰Send안에서 다 처리하는게 아니라 세분화 시켜놓아서 얻는 이점이 어떤건가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 위와 같은 내용에서 typename 이 TypeAt 앞에 선언된 이유가 무엇인지 알 수 있을까요?
operator T* () const { return _ptr; } 연산자 오버로딩 부분 중에 이 부분이 있는데, 다른 것은 앞에 반환 타입이 정해져있는데 이전 C++의 연산자 오버로딩 강의 때는 못본 것 같은데, 이렇게 반환 타입을 따로 정해두지 않는 문법이 있는건가요? 아, 추가로 질문이 있습니다. TSharedPtr에서 Set, Release를 inline 함수로 선언하는 이유가 T가 RefCountable라고 명시를 해두지 않았기 때문에 RefCountable의 멤버함수를 함수 안에서 사용할 수 없어서 인라인 함수로 선언한다고 이해하면 될까요?
1) using FuncType = Ret(*)(Args...);일 때, 매개변수로 FuncType func를 주는 것과 Ret(*func)(Args...)를 주는 것은 완전히 동일하다고 봐도 되나요? 찾아본다고 찾아봤는데 익명 함수 포인터라는 단어는 없고, 기본적으로 함수이름을 붙여서 사용하는 것만 설명이 되있어서 백퍼센트 확신을 하기가 힘드네요 2) using FuncType = Ret(*)(Args...) 와 using FuncType = std::function<Ret(Args...)>가 의미상으로는 완전히 동일하다고 봐도 되나요?
WSAGetOverlappedResult 함수의 4번째 매개변수인 fWaitAll 불리언값의 경우 기본적으로 false를 사용하지만, 하나만 깨우거나 전부 깨우거나 개별 설정을 할 수 있는데요. 복습하다 보니까 GetQueuedCompletionStatus의 경우 iocp핸들, recvLen포인터 같은것, 컴플리션키 포인터, overlapped포인터, 시간 을 매개변수로 받는데 여기는 fWaitAll을 설정하는 부분이 없더라구요. 궁금한 점은 GetQueuedCompletionStatus는 내부적으로 fWaitAll을 false로 가지고 처리되는 함수인가요? 검색해서 찾아보니 GetQueuedCompletionStatus 역시 IO Completion Queue에 처리결과가 삽입되는 순간 깨어나는 시스템이고 이게 Alertable Wait와는 조금 다른 매커니즘이라는 것 까지는 알겠는데 자세하게는 잘 모르겠어서 디폴트로 false인 fWaitAll 플래그를 가지고 처리되는건지 아닌지를 잘 모르겠습니다..ㅠ