Linux多线程编程-线程间参数传递

要求

实现在两个子线程通过全局变量传递数据:即在一个子线程中对全局变量的成员进行赋值,在另一个子线程中对全局变量的成员进行取值并显示。
体会同一进程的不同线程共享进程所拥有的全部资源的特性。

思路

  • 首先,定义一个全局结构类型和对应的变量,定义两个Pthread_t类型变量来保存两个子线程的id。再定义一个主函数和两个用于创建子线程的对应函数。
  • 在主函数中创建两个函数对应的子线程并对创建是否成功进行判断,创建成功后,等待显示子线程结束进程才结束。
  • 在调用子线程对应函数内要打印进入该子进程的特殊信息。调用赋值子进程时分别对全局变量中相应成员赋值,调用显示子进程时取出全局变量中的值并显示。

实现代码

#include 
#include 
#include 
#include 
struct member
{
	int a;
	char *s;
}*p;    //定义一个全局变量

void *create1(void *arg) {
    printf("Thread_1 created successfully\n");
    //对全局变量进行赋值
	struct member *temp;
	temp = (struct member*)arg;
    temp->a = 666;
	temp->s = "HelloWorld!";
	return (void *)NULL;
}

void *create2(void *arg) {
    printf("Thread_2 created successfully\n");
    //对全局变量进行取值并显示
    struct member *temp;
    temp = (struct member*)arg;
	printf("member->a = %d\n",temp->a);
	printf("member->s = %s\n",temp->s);
	return (void *)NULL;
}
 
int main(int argc, char const *argv[]) {
	int error1, error2;
	pthread_t threadId1;
    pthread_t threadId2;
	p = (struct member*)malloc(sizeof(struct member));
	error1 = pthread_create(&threadId1, NULL, create1, (void*)p);
	sleep(1);
    error2 = pthread_create(&threadId2, NULL, create2, (void*)p);
	if(error1) {
		printf("Thread_1 create error!\n");
	    exit(1);
	}
    if(error2) {
		printf("Thread_2 create error!\n");
		exit(1);
	}
	sleep(1); //使主进程陷入阻塞
	printf("Pthread is created!\n");
	free(p);
	p = NULL;
	return 0;
}

运行结果

在这里插入图片描述
结果分析:依次成功创建了两个子线程,在一个子线程赋值成功后,在另一个子线程中打印出全局变量的值。

最后

  • 由于博主水平有限,难免有疏漏之处,欢迎读者批评指正!

你可能感兴趣的:(Linux)