C语言多线程编程:pthread库详解与实践133


C语言本身并不直接支持多线程编程,它依赖于操作系统提供的线程库。在Linux和类Unix系统中,最常用的线程库是POSIX Threads (pthread)。本文将深入探讨pthread库,讲解其核心函数的使用方法,并通过具体的示例代码演示多线程编程的技巧和注意事项。

1. pthread库的基本概念

pthread库提供了一组函数来创建、管理和同步线程。理解以下几个核心概念至关重要:
线程(Thread): 进程中的一个执行单元,共享进程的内存空间,但拥有独立的执行路径。
线程ID(pthread_t): 唯一标识每个线程。
线程属性(pthread_attr_t): 用于设置线程属性,例如线程栈大小、分离状态等。
互斥锁(Mutex): 用于保护共享资源,防止多个线程同时访问而导致数据竞争。
条件变量(Condition Variable): 用于线程间的同步,允许一个线程等待另一个线程满足特定条件。


2. 关键函数详解

以下列出一些pthread库中常用的函数,并简要说明其功能:
pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);: 创建一个新的线程。参数包括线程ID指针、线程属性、线程函数指针和传递给线程函数的参数。
pthread_join(pthread_t thread, void retval);: 等待一个线程结束。参数包括目标线程ID和一个指针,用于接收线程的返回值。
pthread_detach(pthread_t thread);: 将线程设置为分离状态,线程结束后系统自动回收其资源,无需pthread_join等待。
pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);: 初始化一个互斥锁。
pthread_mutex_lock(pthread_mutex_t *mutex);: 加锁,获取互斥锁。
pthread_mutex_unlock(pthread_mutex_t *mutex);: 解锁,释放互斥锁。
pthread_mutex_destroy(pthread_mutex_t *mutex);: 销毁互斥锁。
pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);: 初始化一个条件变量。
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);: 等待条件变量,同时释放互斥锁。
pthread_cond_signal(pthread_cond_t *cond);: 唤醒等待在条件变量上的一个线程。
pthread_cond_broadcast(pthread_cond_t *cond);: 唤醒等待在条件变量上的所有线程。
pthread_cond_destroy(pthread_cond_t *cond);: 销毁条件变量。

3. 示例代码:计算素数

以下代码演示如何使用pthread库计算1到10000之间的素数。我们将使用多个线程来并行计算,提高效率。```c
#include
#include
#include
// 线程函数
void *is_prime(void *arg) {
long long num = *(long long *)arg;
long long i;
for (i = 2; i * i

2025-04-01


上一篇:C语言中gets()函数的危险性及替代方案

下一篇:C语言print输出函数详解:printf、fprintf、sprintf及putchar