C. Параллельное программирование с stdio.h

Функциональности этого модуля представляют собой лишь открытые процедуры. Если я правильно предполагаю, весь статус о его работе (о текущем файле, месте следующей вставки/чтения) он хранит непосредственно в себе, как глобальные данные.

Имея всё это ввиду, как будет происходить работа в многопоточном режиме, когда несколько потоков захотят работать одновременно, с разными файлами? Будет ли кавардак?


Ответы (1 шт):

Автор решения: KoVadim

В с нет понятия "текущий файл". Такое есть в некоторых старых версиях бейсика.

Для работы с файлом используется переменная типа FILE и Вы можете создать нужное кол-во таких переменных под разные файлы. Работа с разными файлами с разных потоков не будет приводить к проблемам ("кавардаку"). А вот одновременная работа с один и тем же файлом с разных потоков - вот тут будут проблемы. Но это будет, если записывать в файл. Если разные потоки только читают - то никаких проблем.

Функциональности этого модуля представляют собой лишь открытые процедуры.

да, это си, здесь только функции. Но те функции, которые работают с файлами, принимают указатель FILE, который хранит "привязку к файлу".

он хранит непосредственно в себе, как глобальные данные.

нет, для каждого файла оно хранится внутри FILE. А вот внутренне устройство этого типа - личное дело компилятора/платформы. Вот, к примеру, написано для gcc - https://stackoverflow.com/questions/17209087/i-wanna-know-the-internal-members-of-struct-file-the-latest-ones

→ Ссылка