
详解Linux线程
线程标识符(Thread ID)。 线程属性(默认为NULL)。 要执行的函数。 函数传递的参数。 使用 线程内部调用
发布日期:2021-05-07 22:56:06
浏览次数:28
分类:精选文章
本文共 2251 字,大约阅读时间需要 7 分钟。
Linux 线程与进程概念解析
操作系统中的线程和进程是计算机执行任务的核心概念。线程是操作系统调度的最小单位,而进程则是资源分配的最小单位。理解这两者的区别对于编程和系统管理都至关重要。
线程与进程的关系
- 线程:操作系统调度的最小单位。一个进程至少有一个线程,负责执行任务。多个线程可以共享一个进程的资源,减少系统开销。
- 进程:资源分配的基本单位。创建进程时,操作系统需要为其分配物理地址和创建页表等,这使得进程的创建开销较大。
创建线程
在Linux系统中,创建线程的函数是 pthread_create()
。它的参数包括:
以下是一个简单的创建线程的代码示例:
#include#include void* run(void* arg) { printf("i am a new thread!\n"); return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); return 0;}
需要注意的是,在编译时需要加上 -lpthread
选项以链接线程库。
线程等待
主线程创建新线程后,如果不等待,新线程可能不会执行。使用 pthread_join()
函数可以等待线程完成并释放资源。
#include#include void* run(void* arg) { printf("i am a new thread!\n"); return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); pthread_join(tid, NULL); return 0;}
线程退出
线程退出有两种方式:
pthread_cancel()
函数由主线程取消线程。pthread_exit()
函数退出。#include#include #include void* run(void* arg) { while(1) { printf("i am a new thread!\n"); sleep(1); } return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); sleep(1); pthread_cancel(tid); return 0;}
线程退出时,可以通过返回值传递数据。
#include#include #include #include void* run(void* arg) { printf("i am a new thread!\n"); int* p = (int*)malloc(sizeof(int)); *p = 10; pthread_exit((void*)p);}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); void* val; pthread_join(tid, &val); printf("return val is : %d\n", * (int*) val); free(val); return 0;}
线程分离
使用 pthread_detach()
可以让线程无需等待释放资源。
#include#include #include #include void* run(void* arg) { printf("i am a new thread!\n"); return NULL;}int main() { pthread_t tid; pthread_create(&tid, NULL, run, NULL); pthread_detach(tid); return 0;}
查看线程
使用以下命令可以查看系统中的线程:
ps -aL
:查看所有轻量级进程。ps -T-p [pid]
:查看特定进程下的线程数。
线程与进程的对比
- 资源分配:进程需要分配物理地址和页表,开销较大。
- 调度单位:线程是调度的基本单位,效率更高。
- 资源共享:进程内的线程共享资源,进程间独立。
- 错误传播:进程内的线程错误可能影响整个进程,进程间不受影响。
理解线程和进程的区别对于优化程序性能、管理系统资源至关重要。在编写并发程序时,合理使用线程可以提升效率,但也需要注意线程安全和资源管理问题。
发表评论
最新留言
很好
[***.229.124.182]2025年04月17日 13时14分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
N皇后问题解法(递归+回朔)
2019-03-15
面试题 08.01. 三步问题
2019-03-15
剑指 Offer 11. 旋转数组的最小数字
2019-03-15
word文档注入(追踪word文档)未完
2019-03-15
作为我的第一篇csdn博客吧
2019-03-15
ajax异步提交失败
2019-03-15
一道简单的访问越界、栈溢出pwn解题记录
2019-03-15
ubuntu18.04.4版本安装docker教程
2019-03-15
Stream 某些API
2019-03-15
关于项目中 对Java 的为空判断整理
2019-03-15
测试调用另一台电脑ip是否有用
2019-03-15
mos-excel集成文档
2019-03-15
chat 快问!
2019-03-15
3.jdk的环境配置
2019-03-15
2.连接池
2019-03-15
2.Html与CSS
2019-03-15
3&4.javascript
2019-03-15
6.Xml
2019-03-15
7.tomcat_servlet
2019-03-15