C语言多线程编程入门:Pthreads基础示例解析

陆景行
陆景行
发布时间:2026-10-14 | 4人浏览过
原创

C语言原生支持多线程开发,但需依赖特定库来实现。本文将演示如何使用Linux标准的POSIX线程库(Pthreads),通过具体代码示例展示如何创建多个并发执行的任务,并确保在主线程结束前等待所有子线程完成。

准备条件

Pthreads是POSIX标准定义的多线程编程接口,广泛适用于Linux、macOS等Unix-like系统。在Windows环境下通常需要额外配置MinGW或pthread-w32库才能编译运行。编写此类代码时,必须包含 stdlib.h 用于内存管理或退出处理,以及 pthread.h 以调用线程相关API。

核心操作顺序

第1步:定义线程入口函数

每个新线程需要执行一个特定的功能,这被定义为“线程入口函数”。该函数必须符合统一签名:void* function(void* arg)。这意味着它接受一个通用指针作为参数,并返回一个通用指针。

在示例中,我们定义了一个简单的测试函数,仅打印当前传入的线程ID标识符:

void *test(void *args) {
    printf("tid %d: i say 'Hello'.\n", (int)args);
    return NULL;
}

第2步:创建并启动线程

使用 pthread_create() 函数可以在当前进程中生成新的执行流。其参数包括指向线程句柄的指针、线程属性(通常为NULL表示默认)、入口函数地址以及传递给入口函数的参数。

以下代码片段展示了如何在循环中批量创建线程,并为每个线程赋予唯一的索引值:

for(i = 0; i < THREAD_NUM; i++) {
    printf("Creating thread %d\n", i);
    // 将整数i强制转换为指针传递
    err = pthread_create(&child[i], NULL, test, (void *) i);
    if(err) {
        printf("Can't create thread %d\n", i);
        exit(0);
    }
}

第3步:同步等待线程结束

如果不采取同步措施,主线程可能会在子线程尚未执行完毕时就退出进程,导致子线程被强制终止。使用 pthread_join() 可以实现阻塞式的同步,主线程会挂起自身,直到指定的子线程完成任务。

for(i = 0; i < THREAD_NUM; i++)
    pthread_join(child[i], NULL);

第4步:完整源代码汇总

将上述步骤整合,即可得到完整的可执行程序。注意代码中包含的头文件引用及宏定义的数量控制:

复制代码 代码如下:
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #define THREAD_NUM 10 void *test(void *args) { printf("tid %d: i say 'Hello'.\n", args); return NULL; } int main() { int i, err; pthread_t child[THREAD_NUM]; for(i = 0; i < THREAD_NUM; i++) { printf("Creating thread %d\n", i); err = pthread_create(&child[i], NULL, test, (void *) i); if(err) { printf("Can't create thread %d\n", i); exit(0); } } for(i = 0; i < THREAD_NUM; i++) pthread_join(child[i], NULL); printf("Thread initialize\n"); return 0; }

完成判断

程序成功运行的标志是所有子线程都输出了对应的问候信息,且主线程最终打印出 "Thread initialize"。由于 pthread_join 的存在,最后的输出一定会在所有子线程结束后出现,保证了逻辑的串行可见性。

简要总结

掌握 pthread_create 和 pthread_join 的配合使用,是理解C语言多线程开发的基石。开发者需要注意参数传递时的类型转换问题(如 (void*)i),并确保在涉及共享资源时需进一步引入互斥锁等机制。以上就是C语言多线程编程使用示例的详细内容,更多关于C语言并发开发资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表