[질문] 쓰레드간 통신에 PIPE 사용이 가능할까요?
글쓴이: onrun / 작성시간: 목, 2007/02/08 - 8:06오후
안녕하세요.
부모프로세스와 자식 쓰레드 2개 사이에 통신용도로 pipe 를 3개 만들어서 사용하고 있습니다.
일단 data 교환도 잘되고 해서 이렇게 써도 되는줄 알고 그냥 썼습니다.
그런데 long run 시 혹은 종종 segmentaion fault 가 나서요.
혹시 pipe 를 잘 못 사용한건 아닌지 궁금합니다.
구조는 아래와 같습니다.
부모프로세서()
{
create pthread A;
create pthread B;
pipe(a0);
pipe(a1);
pipe(b0);
while(1)
{
read(a0,...)
read(a1,...)
read(b0,...)
/* main logic */
}
}
자식쓰레드A()
{
write(a0,...)
write(a1,...)
}
자식쓰레드B()
{
write(b0,...)
}
혹 잘못된 pipe 사용이라면... 어떤걸로 대체가능할지
가르침 부탁드립니다. (_ _)
Forums:
쓰레드는 프로세스
쓰레드는 프로세스 스코프 내에서 메모리를 공유하므로 굳이 nameless pipe를
써야될 이유가 없습니다. 제 생각엔 그냥 circular queue 를 구현해서 사용하는데
더 편리하지 않을까 생각되네요.
아니면 SysV message queue 를 사용하는것도 괜찮습니다. SysV message queue 는 생각보다 가볍고
관리 프로그램이 제공되므로 nameless pipe 보다 관리적인 측면에서 더 좋습니다.
========================================
* 부분이 전체를 대변하는 하나의 속성일때 진리이다.
영속적이지 못한 것은 전체가 될 수 없다.
========================================
* The truth will set you free.
답변감사합니다.
정말 고민이 많았는데 답변주셔서 감사합니다.
그럼 결국 pipe 를 사용해도 문제는 없지만 별로 좋은 구조는 아니다라는
말씀이시죠?
원래는 thread 대신 프로세스 하고 통신하던 구조를 thread 로 바꾸기만
해서 기존에 쓰던 pipe 는 그대로 쓴거라서요.
queue 구조로 바꾸는 걸 생각해봐야겠네요
댓글 달기