linux 的线程

线程:线程与父进程的其他线程一起共享进程的所有资源,线程本身不拥有系统资源,只是拥有一些运行必须的数据结构而已

 

1)创建线程与退出线程

 

 

创建的新线程一直运行,直到满足下面的任何一种情况时退出:

 

1)创建线程时指定要执行的函数执行完毕

2)创建线程的进程退出

3)某个线程调用了exec函数

4)  线程调用pthread_exit()函数退出

5)线程被pthread_cancel()终止。

 

基本线程的管理:

pthread_join()为了让主线程等待创建的线程运行完成后才退出。

取消线程:

 

 

线程的属性:

 

初始化线程属性:

pthread_attr_init(pthread_attr_t * __attr);

销毁已经初始化好了的线程:

extern int pthread_attr_destory(pthread_attr_t *__attr) __THROW;

设置detachstate属性:

extern int pthread_attr_setdetachstate(pthread_attr_t *__attr, int __detachstate);

获取detachstate属性:

extern int pthread_attr_getdetachstate(pthread_attr_t *__attr, int __detachstate);

设置/获取schedparam属性

设置/获取schedpolicy属性

设置获取inheritsched属性

设置/获取contentionscope属性

 
线程调度

 

Linux系统中,从操作系统视角来看,没有真正意义的线程,而是用进程模拟线程(LWP,轻量级进程),Linux不会提供直接创建线程的系统调用,最多提供创建轻量级进程的接口。不过,为满足用户对线程接口的需求,Linux提供了用户线程库,即pthread库(原生线程库),它对下封装Linux接口,对上为用户提供线程控制接口 [^2]。 Linux系统中线程的相关操作通常涉及创建、同步、互斥、通信、终止以及获取线程信息等,这些操作一般通过POSIX线程(pthread)库实现 [^1]。 ### 线程创建 使用`pthread_create()`函数可在当前进程中创建一个新线程,并将其与指定函数关联起来。以下是一个简单示例: ```c #include <pthread.h> #include <stdio.h> // 线程执行的函数 void* thread_function(void* arg) { printf("This is a new thread.\n"); return NULL; } int main() { pthread_t thread_id; // 创建线程 int result = pthread_create(&thread_id, NULL, thread_function, NULL); if (result != 0) { perror("pthread_create"); return 1; } // 等待线程结束 pthread_join(thread_id, NULL); return 0; } ``` ### 线程回收 默认情况下,新创建的线程是不分离的,线程退出后,同组的其它线程需要对其进行`pthread_join`等待操作,否则无法释放资源,从而导致系统资源泄漏。若不关心线程返回值,可让线程分离,即告诉系统,当线程终止时,操作系统可直接回收该线程资源 [^4]。 ### 线程原理 线程由`task_struct`模拟,对于Linux操作系统而言,实际上不存在线程概念,只认识`task_struct`,线程是从用户角度的理解。因此,Linux操作系统的系统调用接口不会提供直接创建、调度、销毁线程的接口,仅提供操作`task_struct`的相关接口。为降低开发难度,Linux系统程序员在用户层面封装了一套接口,即`#include <pthread.h>`中的`pthread_create`、`pthread_exit`等 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值