Linux下创建线程:从入门到实践

🐧 Linux下创建线程:从入门到实践

  • [📚 线程基础概念](#📚 线程基础概念)
  • [🔧 Linux线程创建方法](#🔧 Linux线程创建方法)
    • [1. 基本线程创建](#1. 基本线程创建)
    • [2. 带参数的线程](#2. 带参数的线程)
  • [⚙️ 线程属性设置](#⚙️ 线程属性设置)
  • [🔄 线程同步机制](#🔄 线程同步机制)
    • [1. 互斥锁(Mutex)](#1. 互斥锁(Mutex))
    • [2. 条件变量(Condition Variable)](#2. 条件变量(Condition Variable))
  • [🏆 最佳实践建议](#🏆 最佳实践建议)
  • [🚀 性能考量](#🚀 性能考量)
  • [🛠️ 实际应用示例:简易线程池](#🛠️ 实际应用示例:简易线程池)
  • [📌 总结](#📌 总结)

📚 线程基础概念

在Linux系统中,线程是程序执行的最小单位,是进程中的一个实体。与进程相比,线程更加轻量级,创建和切换的开销更小,且同一进程内的线程共享内存空间。
进程 主线程 线程1 线程2 共享内存

🔧 Linux线程创建方法

Linux提供了多种创建线程的方式,最常用的是POSIX线程(pthread)库:

1. 基本线程创建

c 复制代码
#include <pthread.h>
#include <stdio.h>

void* thread_function(void* arg) {
    printf("线程执行中...\n");
    return NULL;
}

int main() {
    pthread_t thread_id;
    pthread_create(&thread_id, NULL, thread_function, NULL);
    pthread_join(thread_id, NULL);  // 等待线程结束
    return 0;
}

2. 带参数的线程

c 复制代码
void* print_number(void* arg) {
    int num = *(int*)arg;
    printf("接收到的数字: %d\n", num);
    return NULL;
}

int main() {
    pthread_t tid;
    int num = 42;
    pthread_create(&tid, NULL, print_number, &num);
    pthread_join(tid, NULL);
    return 0;
}

⚙️ 线程属性设置

线程属性可以通过pthread_attr_t结构体进行设置:

属性类型 设置函数 说明
分离状态 pthread_attr_setdetachstate 设置线程是否为可连接或分离
栈大小 pthread_attr_setstacksize 设置线程栈大小
调度策略 pthread_attr_setschedpolicy 设置线程调度策略
c 复制代码
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_t tid;
pthread_create(&tid, &attr, thread_function, NULL);
pthread_attr_destroy(&attr);

🔄 线程同步机制

多线程编程中,同步是避免竞态条件的关键:

1. 互斥锁(Mutex)

c 复制代码
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void* thread_func(void* arg) {
    pthread_mutex_lock(&mutex);
    // 临界区代码
    pthread_mutex_unlock(&mutex);
    return NULL;
}

2. 条件变量(Condition Variable)

线程A 条件变量 线程B pthread_cond_wait() pthread_cond_signal() 唤醒 线程A 条件变量 线程B

🏆 最佳实践建议

  1. 资源管理:确保每个动态分配的资源都有明确的释放点
  2. 错误检查:所有pthread函数调用都应检查返回值
  3. 避免全局变量:尽量使用参数传递数据
  4. 线程安全:注意标准库函数是否线程安全

🚀 性能考量

90% 9% 1% 线程创建开销比较 进程创建 线程创建 线程池

🛠️ 实际应用示例:简易线程池

c 复制代码
#define THREAD_NUM 4

void* worker(void* arg) {
    // 工作任务处理
    return NULL;
}

int main() {
    pthread_t pool[THREAD_NUM];
    for(int i=0; i<THREAD_NUM; i++) {
        pthread_create(&pool[i], NULL, worker, NULL);
    }
    // ... 分配任务 ...
    for(int i=0; i<THREAD_NUM; i++) {
        pthread_join(pool[i], NULL);
    }
    return 0;
}

📌 总结

Linux下的线程编程是高性能应用程序开发的核心技能。通过合理使用pthread库提供的各种功能,可以构建高效、可靠的多线程应用。记住线程安全、资源管理和同步机制是多线程编程的关键所在。

💡 小贴士 :使用top -Hhtop命令可以查看系统中运行的线程情况!

相关推荐
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
2401_841495645 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
Yana.nice5 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
fqbqrr5 小时前
2607C++,soui与安卓
c++·soui
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海5 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
吳所畏惧8 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈8 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习