日期:2014-05-16  浏览次数:20563 次

请教有关线程返回值的问题
我的程序有两个线程,主线程和子线程,我想要获得子线程的返回值,还要让主线程与子线程并发执行,该如何办?另外,pthread_join是不是要阻塞调用线程,直到被调线程返回,如果是这样得话,并发就没多大意义了,是吗?谢谢

------解决方案--------------------
"还要让主线程与子线程并发执行 "
多任务系统中不能做到完全并发,如果有特殊要求,可以用信号量或全局变量进行同步。

如果一定要绝对并发请参考kernel关于进程代码,SMP结构里在不同的cpu执行队列中可以做到,我不知道API,呵呵
注意:linux线程其本质就是进程,线程只是共享了父进程的一些资源的进程
------解决方案--------------------
如果主线程不等待子线程退出,那么只能在子线程退出的时候告诉主线程自己退出了,
这个可以有多种方法实现,信号灯,管道,临时文件,共享内存等等。
进程间通信的方法在线程里也是可以用的。
------解决方案--------------------
"我的程序有两个线程,主线程和子线程,我想要获得子线程的返回值,还要让主线程与子线程并发执行,该如何办? "
要获得子线程的返回值,只要在该线程中调用pthread_exit(),该线程的返回值可以会放在pthread_join(tid,pthread_return)中,pthread_return就是该线程的返回值.
------解决方案--------------------
可以使用pthread_join.
当你在主线程调用了pthread_create后, 主线程和子线程就已经在并发执行了。 当主线程处理完自己的逻辑后,可以调用pthread_join获得子线程的返回值。

虽然pthread_join会阻塞被调用的线程, 但此时如果主线程已经处理完了需要并发的操作,也没有影响并发。