리눅스 보드로 쓰는 과제인데
보드는 tcp 클라이언트고
main함수에서 recv를 계속 하고있는중
여기에 스레드 하나 생성해서 while문으로 일을하는데
서버에서 특정 명령어를 보내면, recv로 이걸 받아서 확인하고, 생성한 스레드에서 while문을 1번 도는 구조거든
내가 만든방식은 전역변수 하나 만들어서 main함수에서 명령어 recv후에 전역변수 변화시키고
스레드에서 맨밑에 while문 하나 더 만들어서 전역변수 변했는지 비교하고, 안변했으면 무한루프 돌게 했음
근데 안된다 이유가 뭐임?
대충 소스 간략화하면
전역변수 int check;
main 함수
{
recv(socket,m,1,0);
if(m=='s')
check = 1;
}
스레드
while(1)
{
잡다소스
while(1)
{
mutexlock
if(check == 1)
{
check = 0;
unlock
break;
}
}
}
여기서 스레드 check ==1 쪽이 못넘어감
메인함수 if(m=='s')쪽도 printf로 check가 1로 변하는거 확인했는데
다른방법이 있으면 제발 조언좀여
여긴 쉬우면 쉬워서 안해주고 어려우면 못해준다 그러니 돌아가.
제발 죶밥인생 한번 구원해주는샘치고 부탁드립니다
mutex 쓰든 안쓰든 저기가 안넘어가지네여
뮤택스 바로 윘줄에 usleep(10); 이거 추가 해봐
ㄴ 해봣는데 안되네여
의심가는부분 잇으면 짐작이라도 제발 조언점 부탁드립니다
300Mhz짜리 보드에 리눅스 힘겹게 올려서 쓰는중입니다
덧붙이면 스레드 전체 while문이 시간이 많이걸리는코드입니다. check==1도달하기전에 서버에서 명령어 전달해주면 정상적으로 넘어가더라고여
check==1 while문에 도달한다음에 명령어 전달해주면 printf로 찍엇을때 전역변수 값 변하는것까지 확인가능합니다. 근데 while문은 못벗어나네요
제발 페이지넘어도 확인하니 늦더라도 죶밥에게 도움좀주세요
일단 recv 함수를 쓰레드로 돌려. 그리고 들어온 내용을 큐에 넣어 그리고ㅠ이벤트쏴. 그리고 다른 쓰레드가 돌면서 이벤트 받아서 쓰게해.
디버깅 하면 되지 질문을 올리고 그래