|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Jun 2002
Città: Nella Rossa Socialista Romagna (gambettola(fc))
Messaggi: 2066
|
Aiuto! Cygwin e "Bad System Call" con i semafori
Spero che mi riusciate a dare una mano per questo esercizio del cavolo che devo fare epr un esame ....
Si tratta di un problema di concorrenza da risolvere con i semafori e thread posix (pthread, semget, etc....) Ho installato cygwin (non ho linux e non ditemi di metterlo per sto esame Codice:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#define N 10 // numero di thread
int semid;
int stato = LIBERO;
pthread_t tr[N];
[...] // dichiarazioni varie
union semun
{
int val;
struct semid_ds *buf;
unsigned short *array;
struct seminfo *__buf;
};
[...] // funzioni varie
void *funz_thread(void *ptr)
{
printf("Thread %d entra\n", *(int*) ptr);
sleep(5);
printf("Thread %d esce\n", *(int*) ptr);
}
int main()
{
int i;
union semun arg, dealloc;
unsigned short values[3];
int numthread[N];
key_t semkey;
// ALLOCAZIONE E INIZIALIZZAZIONE SEMAFORI
semkey = ftok("/cygdrive/d/Programmi/UNIVERSITA\'/SO/Progetto/Es1/es1.cpp", 1000);
semid = semget(semkey, 3, IPC_CREAT | 0660);
values[0] = 0;
values[1] = 0;
values[2] = 0;
arg.array = values;
int j = semctl(semid,0,SETALL,&arg);
printf("Semid %d\nj %d",semid,j);
// INIZIALIZZAZIONE THREAD
for (i=0; i<N; i++)
numthread[i] = i+1;
for (i=0; i<N; i++)
pthread_create( &tr[i], NULL, funz_thread, (void*)&numthread[i]);
// ATTESA DEI THREAD
for (i=0; i<N; i++)
pthread_join( tr[i], NULL);
// DEALLOCAZIONE SEMAFORI
semctl(semid,1,IPC_RMID,dealloc);
return 0;
}
se commento tutta la parte dell'inizializzazione dei semafori allora funziona, i thread partono e escono. altrimenti dà sto errore, penso in semget dato che se metto prima la printf allora stampa e poi dà errore, altrimenti da solo errore e stop ovviamente controllare errno dopo semget non vale, dato che dopo l'errore il programma esce direttamente senza eseguire .... cos'ho sbagliato??? forse devo settare qualche variabile visto che è cygwin e forse nn è 100% compatibile? ciao e aiutatemi!!!!!!! grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
non ho guardato il codice ma cyg fa cacare.
Non puoi usare una versione live o emulare linux? ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Jun 2002
Città: Nella Rossa Socialista Romagna (gambettola(fc))
Messaggi: 2066
|
Quote:
cmq DEVO risolvere con cygwin dato che sicuramente è una ca**ata impossibile che nn si risolva!!! su cygwin ci mandano apache mysql postgre che useranno minimo 100 semafori e IL MIO esercizietto nn va? e poi in ogni caso dovrei scaricarmi un intera distribuzione e in un caso o nell'altro è sempre una palla dai ti prego |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
"bad system call" vuol dire...system call non implementata. Potrebbe darsi che cygwin non emula una delle syscall richieste; alcune delle quali non sono affatto "una ca***ata" da emulare
Puoi risolvere il problema in altro modo, in verità: visto che usi i thread, puoi cercare di cavartela con gli oggetti pthread, senza utilizzare affatto gli oggetti IPC come i semafori IPC.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Jun 2002
Città: Nella Rossa Socialista Romagna (gambettola(fc))
Messaggi: 2066
|
ho scoperto che i servizi IPC per cygwin sstanno in un pacchetto che si chiama "cygserver" ... ora devo solo capire come installarlo ...
grazie comunque p.s. il codice andava bene? |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Jun 2002
Città: Nella Rossa Socialista Romagna (gambettola(fc))
Messaggi: 2066
|
Quote:
cmq ho risolto con cygserver grazie lo stesso..... ciao |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:35.



















