Pthread退出和pthread连接

时间:2017-07-24 15:23:30

标签: c pthreads

我想从函数1创建一个线程来执行函数2.要将函数2的完成状态变为函数1,我需要做什么?函数2中是否必须使用pthread_exit将状态变量返回到函数1?

还应该返回功能类型2无效*?什么类型的变量状态(例如,我想使用BOOL)呢?

1 个答案:

答案 0 :(得分:0)

  

我想从函数1创建一个线程来执行函数2. To   获取功能2的完成状态到功能1,我需要什么   要做什么?

你的three alternatives a function has for providing a computed value to a caller in the same thread基本相同。但是,对于指针或整数类型的单个返回值,线程的返回值是提供此类值的特别方便的方法。但是,在尝试获取值之前,确实会确保子线程完成,这会增加复杂性。您可以使用pthread_join()作为该部分。

  

pthread_exit是否必须在函数2中返回   功能1的状态变量?

没有。在对其线程函数的初始调用中执行return语句时,线程也会退出。这相当于将指定的返回值作为参数传递给pthread_exit()。在我的书中,从电话中回来更清晰,但是pthread_exit()的优点是线程可以从任何函数中的任何地方调用它。

  

还应该返回函数2的类型为void *?

您不仅可以,而且 必须 将线程函数的返回值声明为void *。这是此类函数类型的基本部分,如果您尝试使用具有不同返回类型的线程启动函数,则会调用未定义的行为。

  

可能是什么类型   变量状态(例如,我想使用BOOL)然后呢?

C没有名为“BOOL”的类型。它有_Bool和其他整数类型,如果您使用stdbool.h,则它会将宏bool作为_Bool的替代拼写。关于如何从线程返回这样的值,你有几种选择;一种方法是将其强制转换为void *并让父线程将结果转换回来。另一种方法是使用NULL来表示false,并使用任何其他值来表示true。如果您愿意,可以直接在C条件表达式中使用这些值而不进行强制转换。