Witam, potrzebuję pomocy związanej z synchronizacją 2 procesów, klienta oraz serwera.
Program ma działać następująco: Klient wypełnia tablicę, w pamięci współdzielonej liczbami losowymi i wysyła zapytanie do serwera o posortowanie, serwer po przyjęciu zapytania, sortuje dane i wysyła odpowiedź do klienta o powodzeniu operacji, klient odbiera wiadomośc i wyświetla posortowane dane.
Zaciąłem się na etapie synchronizacji, pamięć współdzielona działa ale program uzupełnia i sortuje w losowych momentach.
Nie wiem za bardzo w jaki sposób się za to zabrać, przede wszystkim zastanawiam się w jaki sposób przekazać wiadomości między procesami, jestem w temacie kompletnie zielony.
Planowałem synchronizację zrealizować na semaforach, a do komunikacji między procesami również wykorzystać pamięć współdzieloną która będzie nimi sterować.
Domyślam się, że można to zrobić zdecydowanie lepiej i szybciej, w związku z tym liczę na małą podpowiedź.
poniżej kod, jest tam kilka śmieci
#include stdio.h
#include stdlib.h
#include time.h
#include systypes.h
#include unistd.h
#include string.h
#include fcntl.h
#include sysmman.h
#include sysipc.h
#include syssem.h
#include semaphore.h
#include sysshm.h
#include sysmman.h
#include sysstat.h
#include fcntl.h
#include errno.h
#include time.h
int main() {
int tab[5];
sem_t mut;
int fd;
//SEMAFOR
sem_t s;
sem_init(&s, 0, 1);
if(fork()==-1){
printf(Brak zasobów do rozwidlenia procesu!n);
return 0;
}
else if(fork()!=0) {
sem_wait(&s);
printf(tatan);
// otwieranie pamięci danych
fd = shm_open(shared_memmory_object,O_RDWR , 0777);
// mapowanie
int addr = (int) mmap(0, 10sizeof(int),PROT_READPROT_WRITE,MAP_SHARED,fd,0);
sort
for(int i =0;i10;i++)
{
for(int j=0;j10 -1;j++)
{
if(addr[j]addr[j+1])
{
int temp =addr[j];
addr[j]=addr[j+1];
addr[j+1]=temp;
}
}
}
print
for (int i = 0; i 10; i++) {
printf(%d , addr[i]);
}
printf(n);
//zamykam pamięć
munmap(addr,10sizeof(int));
close(fd);
sleep(1);
}else{
printf(synn);
//tworzenie pamięci danych
fd = shm_open(shared_memmory_object,O_RDWR O_CREAT, 0777);
//wielkość obiektu pamięci
ftruncate(fd,10sizeof(int));
// mapowanie
int addr = (int) mmap(0, 10sizeof(int),PROT_READPROT_WRITE,MAP_SHARED,fd,0);
// wypełniam pamięć
srand(time(NULL));
for (int i = 0; i 10; i++) {
addr[i] = rand()%100;
}
print
for (int i = 0; i 10; i++) {
printf(%d , addr[i]);
}
printf(n);
}
return 0;
}
#include stdio.h
się kompiluje?