큐, 세마포어에 대해 궁금한게 있습니다.. 빠른답변,,,,
글쓴이: shiny / 작성시간: 토, 2003/08/30 - 10:37오전
처음 접하는 문제라... 하나도 모르겠어서 답답하네여..
큐나, 세마포어를 이용해서 시리얼로 수신되는 데이터를 읽어 버퍼에
항상 저장한 후 어플리케이션에서는 'read(fd, buf, 256)' 이런식으로
리드 함수를 호출하면 데이터를 읽게하고 픈데...
간단한 소스나 설명 부탁드립니다,, 급합니다,,
월욜까지 해결해야되는 터라 빠른답변 부탁드립니다...
File attachments:
첨부 | 파일 크기 |
---|---|
actl_thread_queue.h | 4.74 KB |
actl_thread_queue.c | 4.68 KB |
Forums:
님의 답답한 심정은 알겠으나, 님이 요청하신 얘기는 2일짜리는 아닙니다.
님의 답답한 심정은 알겠으나, 님이 요청하신 얘기는 2일짜리는 아닙니다.
적어도, 그러한 일을 해본 경험이 없는 사람에게는 타당한 얘기입니다.
버퍼링을 사용자 프로그램수준에서 수행하고픈것 같은데요.
이런 경우에는 큐를 만들 수 밖에는 없지요. 이럴때 많이 사용하는것이
자료구조에서 나오는 환형큐(circular queue)입니다. 큐의 크기는 계산에
의해 산정될 수 있습니다.
세마포를 사용한다면, 이는 다중 프로세스 또는 다중 스레드 구조로 프로그램을
작성하려고 하신것 같습니다. 입력 쓰레드, 출력 쓰레드, 처리쓰레드, 보통
이정도이겠네요. 입력쓰레드(시리얼라인에서 데이터수신하여 큐에 저장)과
처리쓰레드(입력쓰레드가 수신해놓은 큐에서 데이터 페치하여 처리)는
큐를 공유하게 될것이므로 세마포가 필요하게 되겠지요.
* 문제를 잘 분석해보세요. 구성이 되는 쓰레드(또는 프로세스)와 그들 사이에
공유되는 자료구조(큐? 등등)를 나열하고, 이들간의 관계를 묘사하다 보면
문제가 정리가 되기 시작한답니다. 그림 열심히 그려보세요. 그리고, 그 그림중
잘 안그려지는 부분에 대해 질문하세요. 아마도, 작업지시를 받은 것으로 보아
그림을 그려놓은 사람이 있을텐데, 더 물어봐야 하겠네요. 제가 써놓은 얘기도
어쩌면 작업지시자의 그림과는 판이하게 틀린 사안일 수 있습니다. 고려하시길.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
답변감사합니다..
짧은 지식으로 조금만 더 여쭤보겠습니다..
환형큐를 쓴다고 하셨는데 이건 단지 유저프로그램에서만
활용할수 있는게 아닌지요..
우선 제 상황을 간단히 말씀드리자면,, 시리얼 포트가 두개가 있습니다.
우선 통신이라함은 기본적으로 read/write를 할 수 있어야 되겠지요..
다른 분이 이 보드로 프로그래밍을하다가 저한테 넘겨준건데
테스트를 하다보니 write만 되는걸 얼마전에 알았습니다..
write는 단지 시리얼로 뿌려주는거기 때문에 메모리를 할당받지 않더군여..
시리얼 포트1은 상위 피씨와 통신하게하고 포트2는 하위 remote I/O와
따로따로(개별적으로) 통신하게 해야는데 우선 데이터를 수신받으면
항상 큐에 저장시켰다가 유저프로그램에서 리드를 하면
큐에 수신된 데이터를 삭제 시켜야 되는데..
아주 기본적인 문제인거 같지만 공부를하면할수록 더 복잡해지더군여,,
아직 제가 초보라 간단한 예제를 올려주신다면 이해가 훨씬 빠를거 같네여..
수고하시고 답변 기다리고 있겠습니다...
꿈은 이루어진다.
그렇지 않다면 신이 우리에게 꿈을 꾸게 만들었을 리가 없다.
답변이 없네여..
눈이 빠지게(?) 기다리구 항상 사이트 열어놓구 있었는데
오늘도 답변이 없네여.....
꿈은 이루어진다.
그렇지 않다면 신이 우리에게 꿈을 꾸게 만들었을 리가 없다.
Producer/Consumer Problem인가요?
첫번째/두번째 글은 이해가 가는데, 세번째 글을 읽다 정확하게 와 닫지는 않네요.
그래도 도움이 될까 몰라 제가 쓰는 Multi-Thread환경에서의 Producer/Consumer Problem을 해결하는 소스를 올려드리겠습니다.
Multi-Process에서는 동작하지 않으니 주의하세요. Multi-Process에서 돌리려면 lock대신에 semaphore를 사용하면 될 것입니다.
감솨~~~~
올려주신 자료 잘~ 쓰게씀당~~~~~
감솨~~~~(--)(__);
꿈은 이루어진다.
그렇지 않다면 신이 우리에게 꿈을 꾸게 만들었을 리가 없다.
댓글 달기