C语言:10多线程创建与执行,含POSIX线程库完整示例及详解
以下是一个使用C语言创建10个线程的示例代码,每个线程的任务是打印自身的线程ID和一个表示线程序号的参数。代码中会涉及到线程的创建、等待等操作,使用了POSIX线程库(pthread)。 ```c #include <stdio.h> #include <pthread.h> // 线程的执行函数 void *thread_function(void *arg) { // 将传入的参数转换为整数类型 int thread_num = *(int *)arg; // 打印线程的序号和线程ID printf("Thread %d with ID %lu is running.\n", thread_num, pthread_self()); // 线程执行完毕,返回NULL return NULL; } int main() { // 定义线程数组,用于存储10个线程的ID pthread_t threads[10]; // 定义一个整数数组,用于存储每个线程的序号 int thread_args[10]; // 创建10个线程 for (int i = 0; i < 10; i++) { // 存储当前线程的序号 thread_args[i] = i; // 创建线程,传入线程ID指针、线程属性(这里使用默认属性)、线程执行函数和参数 if (pthread_create(&threads[i], NULL, thread_function, &thread_args[i]) != 0) { // 如果线程创建失败,打印错误信息并退出程序 perror("pthread_create"); return 1; } } // 等待所有线程执行完毕 for (int i = 0; i < 10; i++) { // 等待指定线程结束,传入线程ID和用于存储线程返回值的指针(这里不关心返回值,传入NULL) if (pthread_join(threads[i], NULL) != 0) { // 如果等待线程结束失败,打印错误信息并退出程序 perror("pthread_join"); return 1; } } // 所有线程执行完毕,打印提示信息 printf("All threads have completed.\n"); return 0; } ``` 代码说明: 1. `thread_function` 函数:这是每个线程的执行函数,它接受一个 `void *` 类型的参数,将其转换为 `int` 类型,然后打印线程的序号和线程ID。 2. `main` 函数: - 定义了一个 `pthread_t` 类型的数组 `threads` 用于存储10个线程的ID,以及一个 `int` 类型的数组 `thread_args` 用于存储每个线程的序号。 - 使用 `for` 循环创建10个线程,每个线程的执行函数为 `thread_function`,并传入对应的线程序号作为参数。 - 使用另一个 `for` 循环等待所有线程执行完毕,使用 `pthread_join` 函数确保主线程在所有子线程结束后才继续执行。 3. 编译和运行: - 由于使用了POSIX线程库,编译时需要链接 `pthread` 库,命令如下: ```sh gcc -o multi_thread multi_thread.c -pthread ``` - 运行编译后的可执行文件: ```sh ./multi_thread ``` 注意事项: - 代码中的线程执行函数只是简单地打印信息,你可以根据实际需求修改该函数的功能。 - 线程创建和等待过程中可能会出现错误,使用 `perror` 函数打印错误信息。 ######[AI问答 | 810点数解答 | 2025-11-28 03:15:06]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)30
- 50 分判断题大揭秘:变量、条件、循环与数组知识正误辨析(字节豆包 | 229点数解答 | 2025-12-21 19:15:16)68
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)271
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)269
- Python实现:轻松计算n阶数字矩阵主对角线之和(字节豆包 | 358点数解答 | 2025-12-08 12:25:06)76
- Python 实现:计算数字矩阵左上角数字之和(附代码及详解)(字节豆包 | 333点数解答 | 2025-12-08 17:52:36)83
- Python 巧算数字矩阵左上角数字之和,附代码与详细解释(字节豆包 | 387点数解答 | 2025-12-08 17:54:37)70
- 轻松搞定:计算数字矩阵主对角线之和的 C++ 实现(DeepSeek | 107点数解答 | 2025-12-29 12:22:27)51
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)231
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)340
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)201
- 易语言实现高并发 HTTP 操作:多线程、线程池与异步操作实战(字节豆包 | 849点数解答 | 2025-06-03 23:17:33)260