Linux编程------多线程

为什么有了进程,还要引入线程呢?
1.和进程相比,线程是一种非常“节俭”的多任务操作方式。在Linux系统下,启动一个新进程必须分配给它独立的地址空间,简历众多的数据表来维护它的代码段、堆栈段和数据段,这是一种“昂贵”的多任务工作的方式。
2.运行于一个进程中的多个线程,他们之间使用相同的地址空间,线程间彼此切换所需时间远小于进程间切换所需时间,据统计,一个进程的开销大约是一个线程开销的30倍左右。
3.使得多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
4.改善程序结构
LInux系统下的多线程遵循POSIX(可移植操作系统接口)线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使库libpthread.a
以下是多线程程序设计相关函数:
创建:
#include <pthread.h>
int pthread_create(pthread_t * tidp(线程ID),const pthread_attr_t *attr(线程属性,通常为空),void *(*start_rtn)(void)线程要执行的函数,void *arg(start_rtn的参数))

pthread的库不是linux系统的库,编译时需加上-lpthread
#gcc filename -lpthread

#include <pthread.h>
int pthread_join(pthread_t tid(等待退出的线程id),void **rval_ptr(线程退出的返回值指针))
功能:阻塞调用进程,直到指定线程终止
可以通过以下代码测试此函数的作用
在这里插入图片描述

#include <pthread.h>
pthread_t pthread_self(void)
功能:获取调用线程的thread identifier

#include <pthread.h>
void pthread_cleanup_push(void(*rtn)(void *),void *arg)
功能:将清除函数压入清除栈
Rtn:清除函数
Arg:清除函数的参数
void pthread_cleanup_pop(int execute)
将清除函数弹出清除栈
Execute执行到pthread_cleanup_pop()时是否在弹出清理函数的同时执行该函数,非0:执行;0:不执行

线程调用的正常退出方式:
1.线程从启动例程中返回
2.线程可以被另一个进程终止
3.线程自己调用pthread_exit函数
#include<pthread.h>
void pthread_exit(void *rval_ptr(线程退出返回值的指针))
功能:终止调用进程
关于线程最基本的就先说这么多了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值