线程

一.基本概念:

线程就是运行在进程上下文中的逻辑流,每个线程都有它自己的线程上下文,包括一个唯一的整数线程ID,栈,栈指针,程序计数器,通用目的寄存器和条件码。所有的运行在一个进程里的线程共享该进程的整个虚拟地址空间。

1.进程与线程:
一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
在一个进程中,可能有一个或者多个线程,每个线程有:
♦线程执行状态(运行、就绪等)
♦在未运行时保存的线程上下文;从某种意义上看,线程可以被看做进程内的一个被独立地操作的程序计数器;
♦一个执行栈;
♦用于每个线程局部变量的静态存储空间;
♦与进程内的其他线程共享的对进程的内存和资源的访问。
线程和进程
2.从性能比较看出线程的优点:
1)在一个已有进程中创建一个新线程比创建一个全新进程所需的时间要少许多;
2)终止一个线程比终止一个进程花费的时间少;
3)同一进程内线程间切换比进程间切换花费的时间少;
4)线程提高了不同的执行程序间通信的效率。
3.线程功能特性:
✿线程状态(有4种与线程状态改变相关的基本操作:派生 阻塞 解除阻塞 结束)
✿线程同步
二.相关操作:
1.创建线程:
线程通过调用pthread_create函数来创建其他线程;

#include<pthread.h>
typedef void *(func)(void *);

int pthread_create(pthread_t *tid,pthread_attr_t *attr,func *f,void *arg);

2.终止线程:
一个线程是以下列方式之一来终止的:
♦当顶层的线程例程返回时,线程会隐式地终止;
♦通过调用pthread_exit函数,线程会显示地终止;

#include<pthread.h>
void pthread_exit (void *thread_return);

♦某个对等线程调用Unix的exit函数,该函数终止进程以及所有与该进程相关的进程;
♦另一个对等线程通过以当前线程ID作为参数调用pthread_cancle函数来终止当前线程;

#include<pthread.h>
int pthread_cancel(pthread_t tid);

3.回收已终止线程的资源:
线程通过调用pthread_join函数等待其他线程终止;

#include<pthread.h>
int pthread_join(pthread_t tid,void **pthread_return);

4.分离线程:
在任何一个时间点上,线程是可结合的或者是分离的。一个可结合的线程能够被其他线程收回其资源和杀死。
默认情况下,线程被创建成可结合的。

#include<pthread.h>
int pthread_detach(pthread_t tid);

5.初始化线程:
pthread_once函数允许你初始化与线程历程相关的状态。

#include<pthread.h>
pthread_once_t once_control = PTHREAD_ONCE_INIT;

int pthread_once(pthread_once_t *once_control,void (*init_routine)(void));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值