题目
创建一个多进程的程序,由用户输入进程个数和每个进程的运行圈数
代码
/************************************************************************* > File Name: main.c > Author: 杨永利 > Mail: 1795018360@qq.com > Created Time: 2021年07月14日 星期三 21时22分03秒 ************************************************************************/ /* 此程序为线程的压力测试程序,即由用户输入线程个数和运行圈数 */ #include <unistd.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> //线程运行圈数 int iThreadLoop = 0; void * start_routine(void *arg) { int i = 0; int iThreadNum = (int)arg; for (i = 0; i < iThreadLoop; i++) { printf("第 %d 个线程运行第 %d 圈!\n", iThreadNum + 1, i + 1); } } int main(int argc, char const *argv[]) { //线程个数 int iThreadNum = 0; int i = 0; printf("请输入线程个数:\n"); scanf("%d", &iThreadNum); printf("请输入每个线程运行圈数:\n"); scanf("%d", &iThreadLoop); pthread_t *tid = (pthread_t*)malloc(sizeof(pthread_t)*iThreadNum); if (NULL == tid) { printf("申请内存失败\n"); exit(1); } for (i = 0; i < iThreadNum; i++) { pthread_create(&tid[i], NULL, start_routine, (void *)i); } for (i = 0; i < iThreadNum; i++) { pthread_join(tid[i], NULL); } free(tid); tid = NULL; return 0; }
知识回顾
线程
线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。
线程和进程的区别在于是否独享一段地址空间。 在 Linux 系统下:
- 线程:是最小的执行单位。
- 进程:是最小资源分配单位,可看成是只有一个线程的进程。
线程特点
- 线程是轻量级进程(light-weight process),也有 PCB,创建线程使用的底层函数和进程一样,都是 clone。
- 从内核里看进程和线程是一样的,都有各自不同的 PCB。
- 进程可以蜕变为线程。
- 在 linux 下,线程最是小的执行单位;进程是最小的分配资源单位