Параллельное и распределенное программирование на С++ (Хьюз, Хьюз) - страница 305

или ifstream на основе и м ени, которое было «отсоединено». В строках 32-34, объекты типа ostream_ iterator и ofstream используются для вставки эле м ентов в FIFO-структуру. Обратите вни м ание на то, что програ мм а 11.3.1 не образует никаких ветвлений и не создает сыновних процессов. Программа 11.3.1 зависит от другой програ мм ы, которая должна считывать инфор м ацию из FIFO-структуры channel . 1 или записывать инфор м ацию в FIFO-структуру channel . 2 . Если такая программа не будет работать одновременно с программой 11.3.1, последняя останется заблокированной. Детали реализации приведены в разделе «Профиль программы 11.3.1».

Профиль программы 11.3.1

Имя программы program11-3a.cc

Описание Для пересылки контейнерного объекта через FIFO-структуру используются объекты ТИпа ostream_iterator и ofstream. Для извлечения информации из FIFO-структуры применяется объект типа ifstream.

Требуемые заголовки

, , , ,, , , , , , .

Инструкции по компиляции и компоновке программ

с++ -о program11-3a program113a.сс

Среда для тестирования

SuSE Linux 7.1, gcc 2.95.2, Solaris 8, Sun Workshop 6.

Инструкции по выполнению

./program11-3a & program11-3b

Примечания

Сначала запускается программа 11.3.1. Программа11.3.2 содержит инструкцию sleep, которая восполняет собой отсутствие реальной синхронизации.

Программа 11.3.2 считывает данные из FIFO-структуры channel. 1 и записывает информацию в FIFO-структуру channel. 2.

>// Программа 11.3.2. Считывание данных из FIFO-структуры

>// channel.l и запись информации в

>// FIFO-структурУ channel.2

>10 using namespace std; 11

>12 class multiplier{

>13 double X,-

>14 public:

>15 multiplier(double Value) { X = Value;}

>16 double &operator()(double Y) { X = (X * Y);return(X);}

>17 }; 18

>19

>20 int main(int argc,char *argv[])

>21 { 22

>23 double Size;

>24 double Data;

>25 vector X;

>26 multiplier R(1.5);

>27 sleep(15);

>28 fstream IPipe("/tmp/channel.1»);

>29 ofstream OPipe("/tmp/channel.2»,ios::app);

>30 if(IPipe.is_open()){

>31 IPipe » Size;

>32 }

>33 else{

>34 exit(l);

>35 }

>36 cout « «Количество элементов " << Size << endl;

>37 for(int N = 0;N < Size;N++)

>38 {

>39 IPipe » Data;

>40 X.push_back(Data);

>41 }

>42 OPipe « X.size() « endl;

>43 ostream_iterator Optr(OPipe,"\n»);

>44 transform(X.begin(),X.end(),Optr,R);

>45 OPipe << flush;

>46 OPipe.close();

>47 IPipe.close();

>48 return(0); 49

>50 }

Обратите внимание на то, что в программе 11.3.1 FIFO-стуктура channel.l