相关疑难解决方法(0)

如何在C++中声明一个原子向量

我打算声明一个原子变量向量,用作多线程程序中的计数器.这是我尝试过的:

#include <atomic>
#include <vector>

int main(void)
{
  std::vector<std::atomic<int>> v_a;
  std::atomic<int> a_i(1);
  v_a.push_back(a_i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是gcc 4.6.3的烦人冗长的错误信息:

In file included from /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h:34:0,
             from /usr/include/c++/4.6/bits/allocator.h:48,
             from /usr/include/c++/4.6/vector:62,
             from test_atomic_vec.h:2,
             from test_atomic_vec.cc:1:
/usr/include/c++/4.6/ext/new_allocator.h: In member function ‘void __gnu_cxx::new_allocator<_Tp>::construct(__gnu_cxx::new_allocator<_Tp>::pointer, const _Tp&) [with _Tp = std::atomic<int>, __gnu_cxx::new_allocator<_Tp>::pointer = std::atomic<int>*]’:
/usr/include/c++/4.6/bits/stl_vector.h:830:6:   instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::atomic<int>, _Alloc = std::allocator<std::atomic<int> >, std::vector<_Tp, _Alloc>::value_type = std::atomic<int>]’
test_atomic_vec.cc:10:20:   instantiated from here
/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
/usr/include/c++/4.6/atomic:538:7: error: declared …
Run Code Online (Sandbox Code Playgroud)

c++ stl atomic c++11

33
推荐指数
3
解决办法
2万
查看次数

用不同的线程填充 std::vector

我需要在不同的线程上填充一个 std::vector。

它是正确的代码吗?或者我应该为我的代码添加互斥锁?

void func(int i, std::vector<float>& vec)
{
    vec[i] = i;
}

int main()
{
    std::vector<float> vec(6);
    std::list<std::thread> threads;
    for (int i = 0; i < 6; i++)
    {
        threads.push_back(std::thread(func, i, std::ref(vec)));
    }
    for (auto iter = threads.begin(); iter != threads.end(); iter++)
    {
      (*iter).join();
    }
}
Run Code Online (Sandbox Code Playgroud)

我测试了我的代码它工作正常。有什么陷阱吗?它是线程安全的代码吗?

如何通过不同的线程获取 std::vector 数据?

c++ std stdvector

1
推荐指数
1
解决办法
112
查看次数

标签 统计

c++ ×2

atomic ×1

c++11 ×1

std ×1

stdvector ×1

stl ×1