Здравейте! Не, няма да ви моля да ми пишете задача...
Условието е следното: Да се състави програма на C/C++ която създава два процеса,
комуникиращи през обща памет. Първият процес генерира 50 произволни
цели числа. Вторият процес ги прочита и записва четните числа във файл
A, а нечетните във файл B. За синхронизацията да се използва алгоритъм
на Декер.
Имам следното:
#include <stdio.h>
#include <fcntl.h>
#include <math.h>
int main()
{
int pid_b, arr[50], i, buf, w, A, B; /* pid_a*/
char buffer;
// pid_a = create_process();
// if (pid_a==0)
// { // Parvi proces, koito generira 50 proizvolni chisla
for (i=0; i<50; i++)
{
buf=(rand()%100)+48; //buf=(rand()%55)+64;
arr[i]=buf;
}
wait(&w);
// }
// else if (pid_a>0)
// {
pid_b = create_process();
if (pid_b>0)
{ // Pravi proces, koito syzdava dva faila i sortira chislata po chetnost
if ((A = open("A.txt", O_CREAT|O_RDWR)) == -1)
{
printf("\nGreshno syzdaden fail 'A.txt' !");
return 0;
}
if ((B = open("B.txt", O_CREAT|O_RDWR)) == -1)
{
printf("\nGreshno syzdaden fail 'B.txt' !");
return 0;
}
else
{
A = open("A.txt", O_CREAT|O_RDWR|O_APPEND, 0754);
B = open("B.txt", O_CREAT|O_RDWR|O_APPEND, 0754);
for (i=0; i<50; i++)
{
if (arr[i]%2 == 0)
{
buffer = (char)arr[i]; //buffer = (char) 65;
write (A, &buffer, sizeof(buffer));
}
else
{
buffer = (char)arr[i]; //buffer = (char) 65;
write (B, &buffer, sizeof(buffer));
}
}
close(A);
close(B);
}
}
// }
return 0;
}
Та, според вас задачата отговаря ли на условието? Така и не можах да намеря добро описание на този алгоритъм на Декер.