文档章节

_M_invoke(_Index_tuple<_Indices...>)

元禛慎独
 元禛慎独
发布于 2017/07/13 16:41
字数 423
阅读 48
收藏 0
[hadoop@iZ25s7cmfyrZ C_script]$ cat test_thread_a.cpp 
#include <iostream>
#include <atomic>
#include <thread>
#include <vector>

std::atomic<int> global_counter(0);

void increase_global (int n){
    for (int i=0; i< n; ++i)
      ++global_counter;
}

void increase_reference(std::atomic<int>& variable, int n){
    for (int i=0;i<n; ++i)
      ++variable;
}

struct C:std::atomic<int>{
    C():
        std::atomic<int>(0){}
    void increase_member(int n){
        for(int i=0;i<n;++i)
          fetch_add(1);
    }
};

int main(int argc, char** argv){
    std::vector<std::thread> threads;
    std::cout << "Increase global counter with 10 threads...." << std::endl;
    for(int i=0;i<10;++i)
      threads.push_back(std::thread(increase_global, 1000));

    std::cout << "Increase counter (foo) with 10 threads using reference...\n";

    std::atomic<int> foo(0);
    for(int i=0;i<10;++i)
      threads.push_back(std::thread(increase_reference, std::ref(foo), 1000));
    
    std::cout << "Increase counter (bar) with 10 threads using member...\n";
    C bar{};
    for(int i=0;i<10;++i){
        threads.push_back(std::thread(&C::increase_member,std::ref(bar),1000));
    }

    std::cout << "synchronizing all threads...\n";
    for(auto& th:threads) 
      th.join();

    std::cout << "global: " << global_counter << std::endl;
    std::cout << "foo: " << foo << std::endl;
    std::cout << "bar: " << bar << std::endl;
}

使用  g++ 编译上面的代码,结果因为存在歧义 将C bar{}(注有无{}都报这个错误) 将bar理解成一个 返回C 类型的函数, 文章中说https://en.wikipedia.org/wiki/Most_vexing_parse, 在c++11中已经修复这个错误,就是在 变量后面添加花括号, 但是没有用依然报错,

In file included from /usr/include/c++/4.8.2/thread:39:0,
                 from test_thread_a.cpp:3:
/usr/include/c++/4.8.2/functional: In instantiation of ‘struct std::_Bind_simple<std::_Mem_fn<void (C::*)(int)>(std::reference_wrapper<C>, int)>’:
/usr/include/c++/4.8.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (C::*)(int); _Args = {std::reference_wrapper<C>, int}]’
test_thread_a.cpp:42:77:   required from here
/usr/include/c++/4.8.2/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void (C::*)(int)>(std::reference_wrapper<C>, int)>’
       typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                             ^
/usr/include/c++/4.8.2/functional:1727:9: error: no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void (C::*)(int)>(std::reference_wrapper<C>, int)>’
         _M_invoke(_Index_tuple<_Indices...>)

后来改用 clang++ 编译没有出现这个错误,特此记录

© 著作权归作者所有

元禛慎独
粉丝 3
博文 209
码字总数 60366
作品 0
朝阳
程序员
私信 提问
Python 3.6文档阅读笔记

2017.4.21 argument A value passed to a function (or method) when calling the function. There are two kinds of argument: Arguments are assigned to the named local variables in a ......

月moon
2017/04/22
0
0
Python 2.7.14 RC1 发布,Bug 修复版本

Python 2.7.14 RC1 已发布,Python 2.7.14 RC1 是 Python 2.7 系列中最新的错误修复版本。更新如下: - bpo-30657: Fixed possible integer overflow in PyString_DecodeEscape. Patch by Ja......

局长
2017/09/02
1K
1
Tensorflow一些常用基本概念与函数(一)

#定义‘符号’变量,也称为占位符a = tf.placeholder("float")b = tf.placeholder("float") y = tf.mul(a, b) #构造一个op节点 sess = tf.Session()#建立会话 #运行会话,输入数据,并计算节......

meng_shangjy
2018/04/17
0
0
官方client php api接口日记

安装: composer.json { "require": { "elasticsearch/elasticsearch": "~2.0@beta" }} curl -s http://getcomposer.org/installer phpphp composer.phar install --no-dev require 'vendor/......

沉淀岁月
2016/09/08
32
0
java泛型反映调用方法体内类型引用问题

自个在写自动化测验工具有关thrift效劳自动化测验遇到的疑问 首先给大家看一段代码 Java代码 保藏代码 public static void test(Listlist){ System.out.println(list.get(0)); System.out.p...

haomad
2014/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
38分钟前
6
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
48分钟前
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0
8086汇编基础 start 程序入口标签的示例

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
今天
4
0
uni app 零基础小白到项目实战2

<template> <scroll-view v-for="(card, index) in list" :key="index"> <view v-for =(item, itemIndex) in card"> {{item.value}}</view> </scroll-view></template> GraceUi va......

达达前端小酒馆
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部