Предположим, у нас есть 2 потока в процессе. теперь мы запускаем следующий код:
read(fd, buf, 10);
, где fd - это некоторый дескриптор файла, который используется совместно между потоками (скажем, stati c), а buf - это массив, который не используется совместно между потоками (локальный переменная).
теперь предположим, что размер файла составляет 1 КБ, и первые 10 символов в файле - «AAAAAAAAAA», а все остальные - «B». ("BBBBBB .....").
now Если у нас есть только один процессор, каковы будут результаты буферов, если я буду печатать их в каждом потоке?
Я знаю ответ заключается в том, что один из массивов всегда будет иметь только A, а другой - только B, но я не совсем понимаю, почему, потому что я думаю, что может быть переключение контекста в середине этого системного вызова (чтение), а затем оба из буферов будут иметь в них A.
Возможно ли переключение контекста в середине системного вызова? и если да, то что, по вашему мнению, будет у buf's в конце выполнения?