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
时间: 2024-11-19 23:30:32

c++11多线程与POSIX多线程性能比较的相关文章

POSIX多线程

全文共分四部分: POSIX多线程—概述    POSIX多线程—异步编程举例    POSIX多线程—线程基本概念    POSIX多线程—互斥量概述 POSIX多线程—概述 Content 1. 基础概念 2. 线程安全 3. 可重入 4. 并发系统基本功能 1. 基础概念 线程 进程里执行代码的部分: 包含一系列机器指令所必须的机器状态,包括当前指令位置(一般为PC寄存器).栈顶指针SP.通用寄存器.地址和数据寄存器等. 线程不包括进程中的其他数据,如地址空间和文件描述符: 进程 线程加上

POSIX多线程程序设计_流水线工作例程

#include<pthread.h> #include "errors.h" typedef struct stage_tag{<span style="white-space:pre"> </span>//流水线的工作单元结构体 pthread_mutex_t mutex;<span style="white-space:pre"> </span>//保护当前工作单元数据的互斥锁 p

POSIX 多线程编程及理解

最近开发基于ZYNQ的嵌入式linux程序,涉及到多线程使用,将一些内容整理如下: POSIX多线程编程最为基础和重要的可以分为两部分: 线程操作-Thread Management 线程同步-Synchronization 线程同步主要是由于线程共享同一进程里的资源,因而需要程序员自己对资源进行同步来避免竞争产生 1.线程操作 pthread_create (thread,attr,start_routine,arg) pthread_exit (status) pthread_cancel

POSIX多线程--线程取消

1.三种取消状态Off                   禁用取消Deferred           推迟取消:在下一个取消点执行取消Asynchronous   异步取消:可以随时执行取消 int pthread_cancel(pthread_t thread) 2.推迟取消:在下一个取消点执行取消 Pthreads系统上的某些函数会被作为取消点,如pthread_testcancel,sleep,pthread_cond_wait等.线程调用pthread_cancel函数后,被取消线程

秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】

http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. ----------------------

秒杀多线程第一篇 多线程笔试面试题汇总

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. -------------------------------------华丽的分割线

python 多线程和C++多线程的区别

看到论坛上有人问python多线程和C++多线程的区别? 暖神是这样回答的: Python有Global Interpreter Lock,所以嘛……你懂的.C++11开始才有多线程,使用共享内存方式的线程间通信,有低级的atomic operation和memory order,以及高级的lock, condition的,却没有提供消息队列. 然后,就去找GIL(Global Interpreter Lock)的定义,下面有一个定义,wiki的定义是这样的.在stackoverflow上看到了

Unity3D游戏开发之多线程及使用多线程

Unity3D游戏开发之多线程及使用多线程 Unity3D中的多线程.线程是一个相当复杂的话题,但如果掌握了它,就可以从容的使用多个硬件处理器或处理很难划分管理数据块. 如在场景中用A*算法进行大量的数据计算,变形网格中操作大量的顶点,持续的要运行上传数据到服务器,二维码识别等图像处理,如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine. 线程是在程序中与其他线程同时运行的进行.在多处理器的计算机上可以做到多个线程的真正的同步,更多的线程取决于有多

sevlet是单线程还是多线程,在多线程下如何编写安全的servlet程序

sevlet是单线程还是多线程,在多线程下如何编写安全的servlet程序 首先明确:Servlet是单实例的,即对于同一种业务请求只有一个是实例.不同的业务请求可以通过分发来产生多个实例.其次:单实例的原因我想是因为单实例足可以处理某一个请求,就像ibatis的Querydao.UpdateDao一样都是单实例的.再次:为什么单实例足可以处理某一个请求,因为Servlet是单实例多线程的.http://hiyachen.cublog.cn  [email protected]先看一段代码:pa