首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

多线程容易测试(输出500000000个数字)

2013-08-13 
多线程简单测试(输出500000000个数字)#includestdio.h#includestdlib.h#includepthread.h#includeu

多线程简单测试(输出500000000个数字)
#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>//线程的最大数量const int THREAD_MAX_NUM = 100;pthread_t threads[THREAD_MAX_NUM];//线程的编号int thread_mark[THREAD_MAX_NUM];//平均每个线程需要打印数字的个数int avg_num;//线程数int pthread_num = 1;//数字的数目int number_num = 1;/* * 输出数字的线程函数 */void * output_number (void * arg){ int thread_id = *((int*)arg); printf("thread_id: %d\n", thread_id); //计算线程输出的数字的范围 int st = 0, ed = 1; st = thread_id*avg_num; if(thread_id == pthread_num - 1){ ed = number_num; }else{ ed = st + avg_num; } char fname[32]; sprintf(fname, "/tmp/pthread/%d.log", thread_id); FILE* fp = fopen(fname, "w+"); for(int i = st; i < ed; i++){ //printf("%d\n", i); fprintf(fp, "%d\n", i); } return NULL;}int main(int argc, char* argv[]){ int opt; while((opt=getopt(argc, argv,"p:n:h"))!=-1){ switch(opt){ case 'p': pthread_num = atoi(optarg); break; case 'n': number_num = atoi(optarg); break; } } if(pthread_num < 1){ pthread_num = 1; } if(number_num < 1){ number_num = 1; } avg_num = number_num / pthread_num; printf("pthread_num: %d\n", pthread_num); for(int i = 0; i < pthread_num; i++){ thread_mark[i] = i; pthread_create(threads+i, NULL, output_number, thread_mark+i); } for(int i = 0; i < pthread_num; i++){ pthread_join(threads[i], NULL); } //sleep(2); return 0;}

?测试情况如下:

?

?1个线程(单位:秒)6个线程(单位:秒)12个线程(单位:秒)15个线程(单位:秒)16个线程(单位:秒)均值73.35111.90159.04557.6047.5105?71.16611.8188.3888.0798.482?74.612.07816.8656.8988.702?72.2612.278.4786.74911.197?73.47511.9547.0876.8957.547?75.53611.9859.7037.1296.539

热点排行