쓰레드 조건변수에 대해서
쓰레드를 이용하여서 리눅스 환경에서 코딩을 하려고 합니다
그런데 trylock을 쓸지 조건변수를 이용해서 쓸지 고민하다가 조건변수를 이용해서 쓰기로 결정하였습니다.
그러나!!! 코딩을 하다 보니깐 작은 문제가 있어서 올립니다.
제 프로그램을 간단히 설명하자면은 main함수 외에 두개의 쓰레드가 있습니다.
하나는 소켓에서 Client로 소켓을 열고 서버에 접속하여 DATA를 기다립니다.
그러다가 DATA가 들어왔을때 조건에 맞는 DATA가 들어오면은 어떤 A라는 쓰레드를 signal을 보내서 깨우려고 합니다.
여기서 문제는!!!
이 소켓 쓰레드는 계속 돌면서 DATA를 받고 조건에 맞게 다시 A라는 쓰레드를 호출할 것인지 아닌지를 판단해 주어야 합니다.
그래서 해결책으로 이 A 쓰레드에다가 일정한 루프를 돈 다음에 소켓 쓰레드를 깨우게 signal을 보내려고 합니다.
그러면 소켓쓰레드에서 wait하다가 signal을 인지하면 DATA가 들어왔는지 들어왔으면 조건이 맞는지를 확인하려고 합니다.
이런식으로 코딩을 하려고 하는데 제가 보기에는 조건변수가 2개가 필요할 거 같습니다.
그러면 선언을 해줄때
pthread_cond_t thread_cond_DAC = PTHREAD_COND_INITIALIZER;<- A 쓰레드를 깨울 조건변수
pthread_cond_t thread_cond_Socket = PTHREAD_COND_INITIALIZER;<- 소켓쓰레드를 깨울 조건변수
선언해주고
대기할떄는
pthread_cond_wait(&thread_cond_DAC, &mutex)
이렇게 해주고
signal을 보낼때는
pthread_cond_signal(&thread_cond_DAC, &mutex)
<일단 socket은 생략하였습니다,.>
이런식으로 해주어야 하는지..
제가 생각한 것이 맞는지 알고 싶어서 질문을 올립니다.ㅠㅠ
답변부탁드립니다.ㅠㅠㅠ
댓글 달기