Как вывести динамический массив внутри синхронизированного потока?

Чтобы вывести динамический массив внутри синхронизированного потока в языке C++, вам понадобится использовать мьютексы (мьютексы - это примитивы синхронизации, которые позволяют устанавливать критическую секцию кода). Вот пример кода:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx; // Создаем мьютекс для синхронизации

void printArray(int* array, int size) {
    std::lock_guard<std::mutex> lock(mtx); // Захватываем мьютекс перед выводом

    for (int i = 0; i < size; i++) {
        std::cout << array[i] << " ";
    }
    std::cout << std::endl;

    // Мьютекс автоматически освобождается при выходе из функции
}

int main() {
    int size = 10;
    int* arr = new int[size];

    for (int i = 0; i < size; i++) {
        arr[i] = i;
    }

    std::thread t(printArray, arr, size); // Создаем поток для вывода массива
    t.join(); // Ждем завершения потока

    delete[] arr;

    return 0;
}

В данном примере мы создаем динамический массив arr и заполняем его значениями от 0 до size - 1. Затем мы создаем отдельный поток t для вывода массива. В функции printArray мы захватываем мьютекс mtx с помощью std::lock_guard, чтобы обеспечить синхронизацию доступа к выводу массива. Затем мы просто проходимся по массиву и выводим его элементы.

После создания потока мы вызываем t.join(), чтобы гарантировать, что поток завершил свою работу перед освобождением памяти, выделенной для массива.

Важно отметить, что для корректной работы с потоками и синхронизацией требуется добавить дополнительные проверки на ошибки и правильное управление ресурсами, например, использовать std::lock_guard для корректного освобождения мьютекса в случае исключения. Также, в данном примере не рассмотрены случаи, когда массив изменяется во время его вывода на экран, что может привести к некорректным результатам. Если необходимо защитить массив от изменений во время вывода, необходимо использовать дополнительные мьютексы или другие примитивы синхронизации, чтобы гарантировать безопасность работы с данными.