Day37

Day37

线程的概念

线程是进程的子任务,进程有自己的内存区,一个进程内的所有线程共享进程的代码区,数据区、BSS区、命令行参数、环境变量,只有栈区是一个线程一个

一个进程可以有多个线程并发运行,它们可以执行相同的代码,也可以执行不同的代码

线程函数

#include <pthread.h>

int pthread_create(pthread_t* tid, pthread_attr_t const* attr, void*(*start_routine)(void*), void* arg);

功能:创建新线程

参数:tid 输出线程ID(unsigned long int类型)

  attr 线程属性,NULL表示缺省

  start_routine 线程过程函数,所指向函数将在被创建的线程中执行

arg 传递给线程过程函数的参数

返回值:成功返回0,失败返回-1

线程过程函数

void* pthread_proc(void* arg){......}

⭐main函数其实是主线程的线程过程函数,main函数一旦返回意味着进程即将结束,所有子进程都会结束

⭐prhread_create函数本身不调用线程过程函数,而是在内核中开启独立线程并立即返回,后续在该线程中执行线程过程函数(多个子进程自由并发执行)

传递给线程函数的参数是泛型指针void*,可以指向任何类型的数据,但在线程函数执行期间必须持久有效

#include <pthread.h>

int pthread_join(pthread_t tid, void** retval);

功能:等待子线程终止(阻塞型),与之会合,同时回收该线程资源

参数:tid 线程ID

  retval 输出线程过程函数的返回值

返回值:成功返回0,失败返回错误码

分离线程

线程终止后会被系统自动回收资源,不需要也无法通过pthread_join函数汇合它

线程属性

_detachstate 分离状态

_schedpolicy 线程调度算法

_schedparam 线程的优先级

_scope 争夺CPU资源范围

_stacksize 线程栈大小

_guardsize 警戒缓冲区大小

以分离属性为例演示线程属性的设置

pthread_attr_t myAttr;

pthread_attr_init(&myAttr);

pthread_attr_setdetachstate(&myAttr, PTHREAD_CREATE_DETACHED);

pthread_create(&tid, &myAttr, pthread_fun, NULL);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值