线程

线程是一个动态的对象,他表示进程中的一个控制点,并且执行一系列的指令。


需要库

#include<pthread.h>

编译时需要添加库连接,如

gcc -o test test.c -lpthread


线程创建

int pthrea_create(pthread *thread, pthread_attr_t, void*(*start_routine)(void*), void* arg);


线程ID号获取

pthread_t pthread_self()


线程结束

void pthread_exit(void *retval);


简单例子

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

void show(char *ptr)
{
	int retval;
	printf("%s",ptr);
	pthread_exit(&retval);
}

int main()
{
	pthread_t th1,th2;
	char *msg1="I'm thread_one\n";
	char *msg2="I'm thread_two\n";
	pthread_create(&th1, NULL, (void *)(&show), (void *)msg1);
	pthread_create(&th2, NULL, (void *)(&show), (void *)msg2);
	return 0;
}
上面程序会出现三种可能

1:出现I'm thread_one后出现I'm thread_two;

2:出现I'm thread_two后出现I'm thread_one;

这两种情况是因为线程是同步执行的,无法保证谁先打印;

3:无打印结果

原因是主程序先执行return后,其他线程也随之终止。如要打印可在return前添加sleep函数,但这不一定保险,如线程运行时间过长时,return也会比线程先结束;挂起线程是其解决办法;


挂起线程

int phread_join(phread_t, void**thread_return);

th为线程标识符

thread_return存放其他线程的返回值

在上面程序return的上面添加

void *retval

phread_join(th1, &retval);

phread_join(th2, &retval);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值