一 代码结构
二 代码详解
1. test.cpp
/*************************************************************************
> File Name: test.cpp
> Author: wangzhicheng
> Mail: 2363702560@qq.com
> 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