linux mutex에 관해서 질문입니다.
어느 분의 예제를 보면은.. 이런 소스가 되여 있습니다.
/*********/
pthread_cond_t mycond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t async_mutex = PTHREAD_MUTEX_INITIALIZER;
int main()
{
......
for(int i=0; i<10; i++)
{
pthread_mutex_lock(&async_mutex); //다른곳에서 접근할수 없도록 lock을 건다.
if(pthread_create(&thread, NULL, MultThread, (void)&i) < 0) //쓰레드를 생성한다.
{
printf("쓰레드 생성 실패\n");
return -1;
}
pthread_mutex_wait(&my_cond, &async_mutex); //my_cond신호가 오기까지 대기한다.
pthread_mutex_unlock(&async_mutex); //async_mutex lock을 해제한다.
}
}
void* MultThread(void *args)
{
pthread_mutex_lock(&async_mutex); //async_mutex lock을 건다.
pthread_cond_signal(&my_cond); //신호를 주어 main문의 wait를 깨운다.
pthread_mutex_unlock(&async_mutex); //async_mutex lock을 푼다.
.....
}
main에서 for문을 이용해서 멀티 쓰레드를 생성할때 동기를 맞추기 위해서 lock을 건 후 하나씩 하나씩 생성하는 소스인데요..
이해가 안대는 부분은... 쓰레드를 생성전에 mutex_lock으로 async_mutex를 걸고 생성 후에 MultThread에서
pthread_mutex_lock(&async_mutex); <<이부분에서 더이상 진행이 안대야 하는거 아닌가요?
mian에서 async_mutex를 lock걸엇기 때문에... 해서 pthread_cond_signal 를 못보내주어야 한다고 생각을 했는데..
실제론 컴파일 후 실행해보면... pthread_cond_signal신호를 주고 있는걸 볼 수가 있는데.. 왜그런가요??
pthread_cond_wait 의 특성입니다.
http://kldp.org/node/24762
에서 관련 논의가 있었네요.
---
pthread_cond_signal 의 특성이라고 적었던점을 수정하였습니다.
댓글 달기