2013-10-08 3 views
1

현재 제가 처리하고있는 것은 상당히 간단한 문제입니다. 해결할 수없는 문제입니다.동일한 스레드를 여러 번 사용하는 POSIX pthread

내 프로그램에 두 개의 스레드가 있습니다. 스레드는 정상적으로 실행되지만 문제를 일으키는 스레드를 재사용합니다. 의사 코드에서 다음 몇 가지 조건이 스레드 1에 충족 될 때

main() { 

create thread 1; 
create thread 2; 

join thread 1; 

} 

thread 1 { 
    while true 
    if(some condition) 
     join thread 2 
     // Use the returned value from thread 2 

} 

thread 2 { 
    while true 
    if(some condition) 
     // do something 
     exit thread 2(with some return value to thread 1). 
} 

그래서, 난 그냥 잘 작동 당신이 일을 끝낼 전까지 termine 스레드 2로합니다. 스레드 2가 도달하여 스레드를 종료합니다. 그러나 스레드 1의 while 루프로 돌아와 다시 조건에 도달하면 다시 스레드 2를 다시 실행하려고합니다. 그것이 문제의 원인입니다. 스레드 2를 한 번 실행하면 스레드 1은 내 join 문을 무시하고 실행중인 유일한 스레드 인 while 루프에서 폴링 만합니다.

내 질문은. 어떻게하면 프로그램이 계속 실행되도록 join thread 2 속성을 재사용 할 수 있습니까?

+0

* 다시 시작 * 2로 돌아가시겠습니까? 아니면 그 반품을 다시 사용 하시겠습니까? 후자의 경우 그냥 저장하고'join'을 호출하지 마십시오. 이전 버전 인 경우 조건을 재설정하고 스레드를 다시 시작하십시오. –

+0

전 (前者)입니다. 스레드 2는 두 스레드간에 공유되는 변수를 변경합니다. 스레드 2를 재사용하고 싶습니다. 따라서 변수에 올바른 문이 있습니다. 스레드 1이 사용할 수 있습니다. 그래서 질문은, 어떻게 스레드를 다시 시작합니까? –

답변

0

스레드 2를 한 번 실행하면 스레드 1이 내 join 문을 무시하고 while 루프에서 폴링합니다. 이 유일한 스레드 실행 중입니다.

귀하의 경우에는 pthread_join()이 2 시간 오류로 실패 할 가능성이 높습니다. 반환 값을 확인하십시오.

그러나 스레드 2가 종료 되었기 때문에 기다릴 스레드가 없습니다. 스레드 2를 다시 시작해야합니다. 즉 :

thread 1 { 
    while true 
    if(some condition) 
     join thread 2 
     // Use the returned value from thread 2 
     create thread 2; 
} 
+0

나는 그것을하려고했지만, 그러나, 그것은 내 프로그램이 충돌하게 만든다. 두 번째 작성 메소드가 기본 작성 메소드와 다른 것이 있습니까? –

+0

@HansPeterson 충돌이 발생한 경우 디버거를 실행하여 충돌 원인을 파악할 수 있습니다. 리셋하는 것을 잊은 상태가있을 수 있습니다. –

+0

고마워. :) 지금 일하고있어. pthread_create 메서드에 전달한 변수를 다시 작성해야했습니다. 아마도 충돌을 일으킨 널 포인터 일 겁니다. –

관련 문제