我有一个类似这样的程序
public class Test implements Runnable
{
public int local_counter
public static int global_counter
// Barrier waits for as many threads as we launch + main thread
public static CyclicBarrier thread_barrier = new CyclicBarrier (n_threads + 1);
/* Constructors etc. */
public void run()
{
for (int i=0; i<100; i++)
{
thread_barrier.await();
local_counter = 0;
for(int j=0 ; j = 20 ; j++)
local_counter++;
thread_barrier.await();
}
}
public void main()
{
/* Create and launch some threads, stored on thread_array …Run Code Online (Sandbox Code Playgroud) java parallel-processing concurrency synchronization java.util.concurrent
编辑:在原始问题中,thread_array被声明为vector<thread> thread_array(4);而不是vector<thread> thread_array;,这导致了一个错误 - 这已经被编辑,但问题仍然存在.
来自这个问题:C++程序有时在join() - 线程时崩溃
我设法将它缩小到这个非常简单的程序,希望你可以轻松地编译和运行:
#include <thread>
#include <vector>
using namespace std;
thread_local vector<int> v;
void foo(int n)
{
for(int i=0 ; i<n ; i++)
v.push_back(i);
}
int main()
{
vector<thread> thread_array;
for(int i=0 ; i<4 ; i++)
thread_array.push_back(thread(foo,100));
for(int i=0 ; i<4 ; i++)
thread_array.at(i).join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个程序在到达第二个for循环(加入的循环)后崩溃了?这是MinGW的错误吗?据我所知,我不应该对thread_local向量做任何额外的事情.如果需要,我可以发布具体信息.