C语言多线程编程入门:Pthreads基础示例解析
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步:完整源代码汇总
将上述步骤整合,即可得到完整的可执行程序。注意代码中包含的头文件引用及宏定义的数量控制:
完成判断
程序成功运行的标志是所有子线程都输出了对应的问候信息,且主线程最终打印出 "Thread initialize"。由于 pthread_join 的存在,最后的输出一定会在所有子线程结束后出现,保证了逻辑的串行可见性。
简要总结
掌握 pthread_create 和 pthread_join 的配合使用,是理解C语言多线程开发的基石。开发者需要注意参数传递时的类型转换问题(如 (void*)i),并确保在涉及共享资源时需进一步引入互斥锁等机制。以上就是C语言多线程编程使用示例的详细内容,更多关于C语言并发开发资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













