2013-07-18 2 views
0

나는 POSIX 스레드를 사용하여 C 프로그램을 작성 중이다.수면 스레드 깨우기, 다른 N 초 동안 수면

N을 전역 변수로 둡니다. sleep (N)을 호출하는 스레드가 있습니다. 그런 다음 다른 스레드가 N 값을 변경합니다. 어떻게 sleep (N)이라고하는 원래 스레드를 깨우고 N의 새 값에서 다시 절전 모드를 호출 할 수 있습니까?

내가 N이 업데이트되는 경우, N에 대한 자고 싶어 일어나, 내가는 pthread_cond_wait와과 pthread_cond_timedwait로 보았다 N.의 새로운 값

수면, 바꿔하려면,하지만 난 그것을 생각하지 않는다 스레드가 특정 시간 동안 잠 들어있을 필요가 있으므로 필자의 경우 유용하다. 나는 끊임없이 잠을 자고 매 초마다 일어나도록 내 스레드가 필요하다. user1930928으로

아래 보여, 나는 내가

+0

['pthread_cond_timedwait'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html#tag_16_420)을 시도하고 문제가 있는지 입증 할 수 있는지 다른 질문을하십시오. – pilcrow

+0

당신이 조금 못 알아 들었어, 업데이트 된 N 값을 위해 쓰레드를 잠자기하고 싶니? –

+0

예, N을 위해 잠자기를하거나 N이 업데이트되면 깨우쳐 새 값 N – dj3000

답변

0

질문과 pthread_cond_timedwait 사용할 필요가 있다고 생각하고, 목적은 STIL 나에게 분명하지 않다 ...하지만 당신은 더 나은 귀하의 질문을 명확히 할 수 있도록 나 코드 골격을 제공 할 수 .

Initialize N. 
Initialize mutex. 
Initialize CV. 

T1() 
{ 
    mutex_lock(); 
    while (1) { 
     copy_of_N = N;  
     pthread_cond_timedwait(N); // drops the mutex 
     .... 
     .... 

     // timed wait done OR wakeup was issued on cond var 
     if (copy_of_N != N) { 
      // N was changed 
      do_something(); 
     } else { 
      // N was not changed 
      do_something_else(); 
     } 

     // either way, goto sleep on N.     
    } 
    mutex_unlock(); 
} 

T2() 
{ 
    mutex_lock(); 
    change N; 
    pthread_cond_signal(); 
    mutex_unlock(); 
} 

위의 해골이 귀하의 req와 일치하는지 여부에 따라 질문을 명확히하십시오.

+0

에 대해 잠자기 예. 분명히 pthread_cond_timedwait를 이해하지 못했습니다. 어쨌든 이것을 실제 코드로 바꿀 수 있습니까? – dj3000