std::queue<char*> mq1;
std::queue<char*> mq2;
Thread* nThread = new Thread(&mq1);
if(!nThread->CreateThread())
return -1;
while(1)
{
if(!mq2.empty())
{
mq2.pop();
}
if(!mq1.empty())
{
char* ch = mq1.front();
printf("%s\n", ch);
mq1.pop();
}
}
저게 문제의 코드인데 mq1이라는 큐를 만들어서 주소를 nThread한테 인자로 주면
저 스레드가 큐에다가 메세지를 막 넣음
그럼 메인에서 와일문 돌면서 메세지를 출력하는데
문제는 mq2인데 저 mq2는 선언되고 아무일도 안하잖아
근데 저
if(!mq2.empty())
mq2.pop();
코드가 없으면 mq1에서 메세지를 아무리 보내도 못받는다
근데 저게 있으면 아무 문제 없이 잘 실행됨
std queue문제인가? 이거 도대체 왜이러냐?
동기화를 잘못해서 그렇겠지 std::queue 문제겠냐.
STL은 별로 thread-safe하지 않으니 동기화는 네가 알아서 신경써줘야 한다.
동기화를 하던가 메인쓰레드에선 읽기만 하던가
pop하는 부분에서 레이스컨디션 생김
감사 뮤텍스걸고 해봐야겠네
근데 비동기방식으로 만들어야되서 뮤텍스 걸고하면 안되는데 다른방법 써야되나
ㅇㅇ//되서->돼서 (되어 = 돼임) [리듬 맞춤법 봇♬]
비동기가 문제가 아니라 쓰레드간 통신이 문제임
뮤텍스 쓰면 안되는 상황에서 다른쓰레드에서 뮤터블 공유하는거 자체가 이상한거
전역용사//던->든 (선택은 든 과거 회상은 던) [리듬 맞춤법 봇♬]