Код на C #include <windows.h> //стандартный заголовочный файл windows #include <stdlib.h> //стандартная библиотека #include <time.h> //библиотека функций для работы со временем #include <iostream.h>//потоковый ввод-вывод #include <conio.h> //консольный ввод-вывод #include <dos.h> //функций дос #include <math.h> //библиотека для работы с математическими функциями #define n 30 //количество потоков HANDLE T1, T2, T3; //хэндлы потоков HANDLE ready_x, ready_y, ready_z, free_x, free_y, free_z; //события double x, y, z; double a[n], b[n]; volatile int jout=0; //первый поток DWORD WINAPI Th1(LPVOID) { double w; for (;;) { WaitForSingleObject(ready_x,INFINITE); //ждём х w=1+sin(x); SetEvent(free_x); //х - свободно WaitForSingleObject(free_y,INFINITE); //ждём у y=w; SetEvent(ready_y); //у-готово } } DWORD WINAPI Th2(LPVOID) //второй поток { double w; for (;;) { WaitForSingleObject(ready_y,INFINITE); //ждём у w=cos(y); SetEvent(free_y); //у-свободно WaitForSingleObject(free_z,INFINITE); //ждём z z=w; SetEvent(ready_z); //z готово } } DWORD WINAPI Th3(LPVOID) { double w; for (;;) { WaitForSingleObject(ready_z,INFINITE);//ждём z b[jout++]=z; SetEvent(free_z); //z свободно } } void main() { int i; randomize(); //инициализируем генератор случайных чисел for (i=0; i<n; i++) a[i]=0.1*i; T1 = CreateThread(NULL,0,Th1,NULL,0,0); //создаём потоки T2 = CreateThread(NULL,0,Th2,NULL,0,0); T3 = CreateThread(NULL,0,Th3,NULL,0,0); //устанавливаем события ready_x = CreateEvent(NULL,FALSE,FALSE,NULL); ready_y = CreateEvent(NULL,FALSE,FALSE,NULL); ready_z = CreateEvent(NULL,FALSE,FALSE,NULL); free_x = CreateEvent(NULL,FALSE,TRUE,NULL); free_y = CreateEvent(NULL,FALSE,TRUE,NULL); free_z = CreateEvent(NULL,FALSE,TRUE,NULL); for (i=0; i<n; i++) { WaitForSingleObject(free_x,INFINITE); //ждём х x=a[i]; SetEvent(ready_x); //х готово } while(jout<n); //ждём завершения вычислений for (i=0; i<n; i++) {//выводим результаты if (i% 2== 0) cout<< "\n"; cout << " b["<<i<< "]="<< b [i ] <<"== "<< cos(1+sin(a[i])) ; } getch(); //ждём нажатия клавиши пользователем }
Отредактированно DMT. kate - используйте тег форматирования CODE для оформления кода
|