[질문] 쓰레드간 통신에 PIPE 사용이 가능할까요?

0
points

안녕하세요.
부모프로세스와 자식 쓰레드 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 사용이라면... 어떤걸로 대체가능할지
가르침 부탁드립니다. (_ _)

sunyzero의 이미지
2950
points

쓰레드는 프로세스

1
point

쓰레드는 프로세스 스코프 내에서 메모리를 공유하므로 굳이 nameless pipe를
써야될 이유가 없습니다. 제 생각엔 그냥 circular queue 를 구현해서 사용하는데
더 편리하지 않을까 생각되네요.

아니면 SysV message queue 를 사용하는것도 괜찮습니다. SysV message queue 는 생각보다 가볍고
관리 프로그램이 제공되므로 nameless pipe 보다 관리적인 측면에서 더 좋습니다.
========================================
* 부분이 전체를 대변하는 하나의 속성일때 진리이다.
영속적이지 못한 것은 전체가 될 수 없다.

답변감사합니다.

1
point

정말 고민이 많았는데 답변주셔서 감사합니다.
그럼 결국 pipe 를 사용해도 문제는 없지만 별로 좋은 구조는 아니다라는
말씀이시죠?
원래는 thread 대신 프로세스 하고 통신하던 구조를 thread 로 바꾸기만
해서 기존에 쓰던 pipe 는 그대로 쓴거라서요.
queue 구조로 바꾸는 걸 생각해봐야겠네요

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.