thread내에서 부모스레드가 처리완료될때까지 기다리는 방법 문의드립니다.
글쓴이: siba555 / 작성시간: 금, 2014/10/31 - 7:25오전
안녕하세요..
서버개발중인데요.. 접속이 되면 스레드가 1개 소켓을 처리하는 방식입니다.
그런데 이 소켓처리 스레드내에서 자식 스레드를 생성하고 이 자식스레드에서 다른곳으로 connection을 맺어 원격지 파일을 읽어오는 로직인데 read Ack가 올때까지 부모가 기다리는 방법이 있을까요?
쉬운방법으로 전역변수를 Ack가오면 값을 true로 만들고 무한루프돌면서 기다리는 방법이 있을건데 sleep를 걸지않으면 컨텍스트스위칭이 일어나지 않더군요.. sleep를 걸면 되지만 적은시간이지만 delay가 생기구요..
그래서 윈도우 이벤트처럼 자식스레드에서 작업이 완료될때까지 기다렸다가 자식이 이벤트를 보내면 깨어나서 부모스레드에서 일을 하는 방식이나 좋은 방법이 있는지 선배님들 조언을 구합니다.
즐거운 하루보내세요.
Forums:
쓰레드간 동기화 목적이면..
보통 세마포어가 공유자원 관리를 위해 쓰이기도 하지만
어떤 일의 순서가 주어졌을 때 제어하기 위해서도 쓰입니다.
(메모리 동기화 뿐만 아니라 시간적 동기화)
서로 다른 쓰레드에서 A->B 의 순서로 실행되게 하려면
A 코드에서는 마지막에 세마포어 하나 증가 하도록,
B 코드 처음에서는 세마포어 진입 조건을 걸어두면 운영체제가 알아서...
방법은 많아요.
프로그램 언어도 방언이 너무 많은 신기한 언어라 그냥 단서만 남겨드립니다:
condition variable, pthread join(), promise : future
조건 변수(cv), join()은 pthread 에 다 있습니다. promise, future는 c++11에 나온 개념이긴 하고 원래 스레드 동기화를 위해 쓰는게 아니긴 하지만 뭐, 동기화에도 활용할 수 있습니다.
cv는 윈도의 이벤트 핸들처럼 여러번 활용 가능하고, join(), promise:future는 일회용.
아주~ 간단하게 이렇게 하시면 됩니다. 자식 스레드가 반환될 때 까지 block:
혹은 재사용:
답변 감사하드립니다.
c++11에서 새로 추가된 내용이 많네요..
감사합니다. ^^
댓글 달기