Как использовать связанные списки в многопоточном окружении? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь запустить алгоритм параллельных простых чисел в многопоточности, используя связанные списки.Однако, когда я запускаю функцию комбинированных списков, в моих списках нет данных.

Я попытался создать массив связанных списков и векторов.Я думаю, что это проблема с указателем, так как они оба дали мне одну и ту же проблему

Это моя основная функция, которую выполняет каждый мой поток.

Когда я наблюдаю «подсписок» в отладчикепохоже, что он работает

void multiThreadFunctions(LinkedListNode *subList)
{

//some code

    if (isPrime(i))
        subList->addnode(i);

//more code

}

это фрагмент кода, который я использую для вращения новых потоков и передачи списков

    LinkedListNode** Lists;
    Lists = new LinkedListNode*[threadsCount];


    vector<std::thread> threads;

    for (int i = 0; i < threadsCount; ++i)
    {
        LinkedListNode *newlist = new LinkedListNode;

        //needed for indexing to divide up the work equally
        newlist->listid = i;
        newlist->threads = threadsCount;
        newlist->max = max;

        threads.push_back(thread(multiThreadFunctions, ref(newlist)));
        Lists[i] = newlist;
    }


    // loop again to join the threads
    for (auto& t : threads)
    {
        //cout << Lists[1].returnsize();
        t.join();
    }

Я хочу, чтобы этот код прикреплял огромный связанный список,или, по крайней мере, есть способ получить доступ к номеру после завершения потоков

    //At this point I want an array of linked lists with prime numbers
    for (int i = 0; i < threadsCount; ++i)
    {
        MainList.CombineLists(Lists[i]);
    }

В отладчике он показывает, что списки пусты, и я не могу понять, почему

Я хочу, чтобы у меня был доступ ко всем данным, чтобы я мог их распечатать или записать в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...