Чтобы вывести динамический массив внутри синхронизированного потока в языке 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
для корректного освобождения мьютекса в случае исключения. Также, в данном примере не рассмотрены случаи, когда массив изменяется во время его вывода на экран, что может привести к некорректным результатам. Если необходимо защитить массив от изменений во время вывода, необходимо использовать дополнительные мьютексы или другие примитивы синхронизации, чтобы гарантировать безопасность работы с данными.