Linux系统编程之线程一(线程的创建)

本文深入探讨了线程与进程的区别,重点讲解了线程的创建、终止、连接及资源管理,同时阐述了线程间共享内存的特点及线程数据类型,如pthread_t、pthread_mutex_t等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      线程(thread)与进程类似,但是创建一个线程是进程的10倍甚至更多,一个进程可以包括多个线程,多线程可以执行多个任务,且每个线程之间都可以执行独立的任务。

注意:线程之间是共享同一个全局内存区域的,包括数据段,堆,栈;同时还包括一下内容:

  • 1:进程的ID;
  • 2:控制终端;
  • 3:用户ID和组ID;
  • 4:打开的文件描述符;
  • 5:资源限制;
  • 6:间隔定时器(setitimer())和POSIX定时器(timer_create();
  • 7:信号处置;

 

             线程数据类型:

pthread_t线程ID
pthread_mutex_t互斥对线
pthread_mutexattr_t互斥属性对象
pthread_cond_t条件变量
pthread_condattr_t条件变量的属性对象
pthread_attr_t线程的属性对象

线程创建:

#include<pthread.h>

int  pthread_create((pthread_t  *thread,  pthread_attr_t  *attr,  void  *(*start)(void  *),  void  *arg)

参数thread:线程id

attr: 线程属性设置

第三个参数:线程处理函数

arg:传递给线程处理函数的参数(任意对象类型的指针传递给start()函数,也可设置为空)

返回值不为0时,代表创建线程失败。
————————————————
 

线程终止:

  • 线程执行函数start执行return语句结束;
  • 线程调用pthread_exit()函数退出;//---》pthread_exit()终止线程,返回值可以由另一线程通过pthread_join()来获取

     void pthread_exit(void *retval)

  • 调用pthread_cancel()取消线程
  • 任意线程调用exit(), 终止所有线程;

线程ID可以同过pthread_self()来获取;

线程连接函数

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

--retval如果不为NULL, 则为return或pthread_exit()所指定的值

线程结束后必须释放其线程资源,如果没有主动释放线程资源,等待系统自动回收, 可能会造成创建新线程失败。

pthread_join()函数会阻塞等待线程结束,然后才会释放线程资源,防止产生僵尸线程。

也可以使用在线程执行函数种添加pthread_detach(pthread_self())自行分离函数,通常使用第二种。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值