多线程

本文详细介绍了Linux下多线程的概念,包括PCB、多进程与多线程的区别,以及线程相关接口的使用,如pthread_create、pthread_exit、pthread_join和pthread_detach等,帮助理解线程在操作系统中的工作原理。
摘要由CSDN通过智能技术生成

一、前言
1、PCB
  pcb在Linux下是一个进程,线程由进程pcb模拟实现,因此Linux下pcb即为线程,也称为轻量级进程。
  
2、多进程与多线程的基本概念
  多进程任务是指多个进程同时执行任务,分别执行不同的代码,进程之间毫无关联,也就是说多个pcb拥有多个虚拟地址空间。
  多线程任务是指多个线程同时执行一个任务,多个pcb只拥有一个虚拟地址空间,多个线程同时执行此虚拟地址空间所对应的不同的物理内存中的代码。
  
3、进程与线程的关系
  一个进程可能拥有多个线程,且拥有一个主线程,并在主线程中创建子线程。由于一个进程是多个线程的集合,所以称为线程组。
进程pid = 主线程pid
  Linux线程即为pcb------------线程是CPU分配的基本单位
  资源分配给整个线程组------进程是资源分配的基本单位
  
二、线程相关接口
1、提要
  线程要使用 #include <pthread.h> 头文件
  编译时要加 -lpthread, 否则编译过程无法链接到pthread库
  getpid()使用 #include <unistd.h> 头文件
  
2、pid和tid
  getpid()---------------------pid;
  pthread_self()-------------tid;
  
  syscall(SYS_gettid)------tid;
  由于各个进程相对独立,因此可能会存在以下情况:
    进程p1中的线程t1—tid1 = 进程p2中的线程t2—tid2。
  当t1和t2需要进行通信时,调用syscall(SYS_gettid) 来获得真正的tid。
  
3、pthread_create

/*
线程创建---接口原型
int pthread_create(pthread_t* thread, const pthread_attr_t* attr,
				   void* (*start_routine) (void *), void* arg)
thread: 输出型参数,获取新创建的线程id
attr: 设置线程属性,常置为空
start_routine: 线程入口函数
arg: 通过线程入口函数传递给线程的参数
*/
void* th_start(void* arg)
{
   
	while(true)
	{
   
		//get---tid
		std::cout << "I am the child of " << pthread_self() << std::endl;
		sleep(1);
	}
	return nullptr;
}

int main()
{
   
	pthread_t tid;
	
	int ret = pthread_create(pid, nullptr, th_start, (void*)"create thread");
	if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值