msg qu는 block된다거나 하지 않습니까?
proc A proc B
┌────────┐//////////┌────────┐
| ┌──────┐│//////////│ ┌──────┐│
│ | recv Thrd │--------┐ │ │ while(1) ││
│└──────┘│//////│ │ │ (send) ││
│ │//////├─── ││
│┌──────┐│//////│ │ │ (recv) ││
││send Thrd │--------┘ │ │ ││
│└──────┘│//////////│ └──────┘│
└────────┘//////////└────────┘
- 원하는 동작
1. Proc B가 데이터를 보내면
2. Proc A의 recv Thread가 받아서 recv_buf에 저장
3. main에서는 recv_buf에서 읽어서 처리후 send_buf에 씀
4. send Thread가 send_buf를 읽어서 보냄
5. Proc B는 데이터를 확인
- 현재의 상황
1. 실제로는 Proc A에서 데이터를 받고 처리까지 양호
2. send Thread에서 문제 발생
3. 그 후 복구 불가.
이렇게 하면 데이터를 주고 받을 줄 알았는데, 실제로는
msgsnd와 msgrcv가 서로 아귀가 안맞는군요.
send Thread와 recv Thread는 각각 보낼 내용과
받을 내용을 저장하는 임시 변수(send_buf, recv_buf)
를 main함수와 공유합니다. (전역변수)
아, 참 linux에서는 하나의 프로세스에 여러개의 thread가
있으면, sleep()등이 없으면, 원래 하나의 thread가 독점
하게 되는 것입니까?
댓글 달기