🐧 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
🏆 最佳实践建议
- 资源管理:确保每个动态分配的资源都有明确的释放点
- 错误检查:所有pthread函数调用都应检查返回值
- 避免全局变量:尽量使用参数传递数据
- 线程安全:注意标准库函数是否线程安全
🚀 性能考量
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 -H或htop命令可以查看系统中运行的线程情况!