小编Kov*_*nen的帖子

我怎样才能重写这个主线程 - 工作线程同步

我有一个类似这样的程序

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

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

C++ - thread_local向量导致join()崩溃

编辑:在原始问题中,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向量做任何额外的事情.如果需要,我可以发布具体信息.

c++ concurrency mingw c++11

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