c++11多线程与POSIX多线程性能比较
一 代码结构
二 代码详解
1. test.cpp
/************************************************************************* > File Name: test.cpp > Author: wangzhicheng > Mail: [email protected] > Created Time: Thu 26 Feb 2015 09:35:49 PM WST ************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <sys/time.h> #include <sys/types.h> #include <sys/wait.h> #include <pthread.h> #include <iostream> #include <thread> using namespace std; void* fun(void *arg) { return NULL; } void g() { } int main() { int i; pid_t pid; pthread_t tid; struct timeval tv1, tv2; unsigned long long elapse; /* * create processes * */ /* gettimeofday(&tv1, NULL); for(i = 0;i < 1000;i++) { pid = fork(); if(pid < 0) { perror("fork error...!\n"); exit(EXIT_FAILURE); } else if(!pid) { exit(0); } else { wait(NULL); } } gettimeofday(&tv2, NULL); elapse = (tv2.tv_sec - tv1.tv_sec) * 1e6 +(tv2.tv_usec - tv1.tv_usec); cout << elapse << endl; // 2.7026s */ /* * create POSIX threads */ gettimeofday(&tv1, NULL); for(i = 0;i < 1000;i++) { if(pthread_create(&tid, NULL, fun, NULL)) { perror("threads create error..!\n"); exit(EXIT_FAILURE); } pthread_join(tid, NULL); } gettimeofday(&tv2, NULL); elapse = (tv2.tv_sec - tv1.tv_sec) * 1e6 +(tv2.tv_usec - tv1.tv_usec); cout << elapse << endl; // 1.591s /* * create c++11 threads */ /* gettimeofday(&tv1, NULL); for(i = 0;i < 1000;i++) { thread mythread(g); mythread.join(); } gettimeofday(&tv2, NULL); elapse = (tv2.tv_sec - tv1.tv_sec) * 1e6 +(tv2.tv_usec - tv1.tv_usec); cout << elapse << endl; // 1.848s */ return 0; }
2. makfile
CC=g++ all: $(CC) -std=c++0x -g -o test test.cpp -pthread -lpthread
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。