通过几个实验练习,学习线程之间连接的具体实现。下面列举了两个例子,一个是子线程返回简单数据类型;另一个是子线程返回复杂数据类型。 子线程返回复杂数据类型 功能 :pthread_join()函数,以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果线程已经结束,那么该函数会立即返回。
引言
实现代码
#include<stdio.h> #include<pthread.h> #include<unistd.h> #include<stdlib.h> struct member { int a; char *b; }; void *create(void *arg) { struct member *temp = (struct member*)malloc(sizeof(struct member)); temp->a = 2; temp->b = "HelloWorld!"; printf("Thread created successfullyn"); return (void*)temp; } int main(int argc, char *argv[]) { int error; pthread_t threadId; struct member *c; error = pthread_create(&threadId, NULL, create, NULL); if(error) { printf("Thread create error!n"); exit(1); } printf("I am mainn"); error = pthread_join(threadId, (void**)&c); //注意pthread_join()的函数声明 if(error) { printf("Thread is not exit!n"); exit(1); } printf("c->a = %d n", c->a); printf("c->b = %s n", c->b); sleep(1); return 0; }
注意
struct member *c;
要注意在pthread_join()中进行强制类型转换,即将member**
转换为 void**
。具体代码为(void**)&c
,其中&c
为member**
类型。pthread_join()
头文件 : #include <pthread.h>
函数声明:int pthread_join(pthread_t thread, void **retval);
参数说明:thread: 线程标识符,即线程ID,标识唯一线程。retval: 用户定义的指针,用来存储被等待线程的返回值。
返回值 : 0代表成功,非0是失败。最后
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算