Linux中多线程详解及简单实例
简介
在Linux系统下,多线程是一种常见的编程方法,能够有效提高程序的运行效率。本篇文章将从多线程的概念、使用方法以及简单实例展开讨论。
多线程概念
多线程是指在一个进程(process)内部,存在多个独立运行的线程(thread),每个线程都有自己的执行序列和程序计数器。多线程可以利用多核CPU并行处理任务,提高程序的运行效率。另外,多线程之间共享进程的资源,包括变量、文件等,相比于多进程通信的成本更低。
多线程使用方法
头文件和编译选项
使用多线程需要包含pthread.h头文件,并在编译时添加-lpthread选项,例如:
gcc -o output program.c -lpthread
创建线程
在Linux系统中,使用pthread_create函数创建线程,其定义如下:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
参数说明:
- thread:创建的线程ID
- attr:线程的属性,如果为NULL则使用默认属性
- start_routine:线程执行函数,该函数的返回值必须为void*
- arg:传递给start_routine的参数
等待线程
使用pthread_join函数等待线程结束,其定义如下:
int pthread_join(pthread_t *thread, void **retval);
参数说明:
- thread:指定要等待结束的线程ID
- retval:线程返回值,如果不关心则传递NULL
线程退出
如果需要在线程执行结束后退出线程,需要使用pthread_exit函数,其定义如下:
void pthread_exit(void *retval);
参数说明:
- retval:线程的返回值
多线程示例
下面将通过两个示例分别进行演示。
示例一:计算1-100的和
#include <stdio.h>
#include <pthread.h>
void *sum(void *param) {
int result = 0;
int i;
for(i = 1; i <= 100; i++)
result += i;
pthread_exit((void *)result);
}
int main(int argc, char *argv[]) {
pthread_t tid;
void *status;
pthread_create(&tid, NULL, sum, NULL);
pthread_join(tid, &status);
printf("Sum is %d.\n", (int)status);
return 0;
}
该示例中,我们使用pthread_create函数创建了一个新线程,执行sum函数计算1-100的和,然后通过pthread_join函数等待线程结束并获取线程返回值,最后输出计算结果。
示例二:两个线程交替输出
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void *func1(void *arg) {
int i;
for(i = 1; i <= 10; i += 2) {
pthread_mutex_lock(&mutex);
printf("%d\n", i);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
void *func2(void *arg) {
int i;
for(i = 2; i <= 10; i += 2) {
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
printf("%d\n", i);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main(int argc, char *argv[]) {
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, func1, NULL);
pthread_create(&tid2, NULL, func2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
该示例中,我们创建了两个线程,分别执行func1和func2函数,这两个函数将交替输出1~10之间的偶数和奇数。使用pthread_mutex_lock和pthread_mutex_unlock函数保证每次只有一个线程能够输出,使用pthread_cond_wait和pthread_cond_signal实现线程之间的同步。
总结
本篇文章详细讲解了Linux中多线程的概念、使用方法以及两个简单的示例。多线程是一种常见的编程方式,它可以提高程序运行效率,但同时也需要开发者注意线程之间的同步与互斥。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux中多线程详解及简单实例 - Python技术站