2013-10-08 27 views
1

我目前正在处理,我相信,是一个相当简单的问题,我似乎无法解决。POSIX pthread多次使用相同的线程

我在我的程序中有两个线程。线程运行得很好,但它是线程的重用,导致了问题。伪代码如下:

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). 
} 

所以,当某些条件线程1被满足,我希望它termine线程2,直到它的工作要做,这工作得很好。线2到达状态并退出线程。但是,当我回到线程1的while循环并再次达到该条件时,我希望它再次重新运行线程2。这是导致问题的原因。线程1执行一次后,线程1会忽略我的连接语句,并在while循环中进行轮询,这是唯一正在运行的线程。

所以我的问题是。我怎样才能重用连接线程2属性,所以程序连续运行?

+0

你想*重新开始*第2步,还是要重复使用它的返回?如果后者只是保存它,并且不要调用'join'。如果前者,然后重置条件并重新启动线程。 –

+0

它是前者。线程2更改两个线程之间共享的变量。我想重用线程2,所以变量有正确的语句,供线程1使用。所以问题是,我该如何重新启动他的线程? –

回答

0

线程1执行一次后,线程1忽略我的连接语句,只是在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

我试图做到这一点,但是,它会导致我的程序崩溃。 第二个创建方法应该与主create方法有什么不同? –

+0

@HansPeterson如果它崩溃了,那么你可能想在调试器中运行,以帮助你找出它为什么崩溃。这可能是你忘了重置的状态吗? –

+0

谢谢:)现在就工作吧。我不得不重新创建我交给pthread_create方法的变量。可能是导致崩溃的空指针。 –