线程pthread_create,pthread_join

用gcc编译一个名字为thread.cpp生成的目标文件thread.o(gcc thread.o -o thread)时,报错:thread.o(.eh_frame+0x63):undefined reference to '__gxx_personality_v0' collected2:error: ld returned 1 exit status

原因为gcc为c编译器,只可编译.c文件;

g++为C++编译器,兼容c,可用g++编译.cpp文件以及.c文件。

解决方案1:.cpp 改名为.c

解决方案2:对生成的目标文件thread.o执行操作(g++ thread.o -o thread)

注意:pthread_create函数的参数的使用

源代码如下:

#include <stdio.h>
#include <pthread.h>

void *thread_address(void *);

int main(int argc,char *argv[])
{
	pthread_t thread;
	pthread_create(&thread,NULL,thread_address,NULL);//创建线程,用法
	pthread_join(thread,NULL);//主线程一直阻塞等待thread的返回
	return 0;
}

void *thread_address(void *)
{
	printf("create thread successfully !\n");
	printf("thread num:%d\n",1);
	pthread_exit(0);
}

运行结果如下:



注:

在Linux中,默认情况下,在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设置Threads attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源。

在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。不过这个copy过程和fork不一样。copy后的进程和原先的进程共享了所有的变量,运行环境。

代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待知道等待的线程结束自己才结束,使创建的线程有机会执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值