|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2005
Messaggi: 11
|
sincronizzazione processi e thread
Salve a tutti, sono nuovo del forum e avrei bisogno di aiuto per un progetto da realizzare usando il c. Il testo, composto da 2 parti, è il seguente:
“1. Realizzare una piccola libreria di funzioni che, utilizzando le chiamate di sistema IPC, permetta a più processi di sincronizzarsi per: - richiedere l'allocazione di un numero k di risorse da un pool di N risorse, tutte dello stesso tipo, disponibili inizialmente (dove N è una costante dichiarata in un opportuno file della libreria). L'allocazione deve avvenire in modo atomico, ovvero: se tutte le k risorse sono disponibli, vengono assegnate, altrimenti non ne viene allocata nessuna e il processo viene sospeso - restituire m risorse. Scrivere programmi opportuni per illustrare l'utilizzo e il funzionamento della libreria. 2. Realizzare poi una analoga libreria per un processo con thread multipli piuttosto che per processi multipli. Cioè una piccola libreria di funzioni che, utilizzando le chiamate della libreria Pthreads, permetta a più threads di sincronizzarsi per richiedere in mutua esclusione, in modo atomico, un numero k di risorse da un pool di N risorse, tutte dello stesso tipo, disponibili inizialmente (dove N è una costante dichiarata in un opportuno file della libreria), e per restituire m risorse.” Se qualcuno avesse le idee più chiare di me e sapesse darmi qualche indicazione per partire gliene sarei grato. Grazie a tutti!!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per Windows o per Linux ?
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Dec 2005
Messaggi: 11
|
per Linux
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
faccio una domanda da persona che sa poco di thread... che differenza c'e' tra processi e thread?
ciao e grazi
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#5 | |
|
Messaggi: n/a
|
Quote:
)
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Quote:
ciao e grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Linux fino a poco tempo fa non aveva i thread ora sono pienamente supportati... I thread vengono anche detti "processi leggeri", questo perchè la creazione è molto più semplice e meno onerosa...
In pratica i thread, al contrario dei processi, condividono lo stesso spazio di indirizzamento del processo/thread da cui vengono creati... Questo implica che l'accesso ad una determinata area di memoria può essere fatto contemporaneamente da due flussi di esecuzione diversi appartenenti allo stesso programma... Solitamente il thread è una funzione che viene eseguita parallelamente al flusso di esecuzione che l'ha creata... Per evitare race condition e mantenere la coerenza dei dati vengono eseguite particolari chiamate di sistema che permettono di far accedere ai dati in modo esclusivo (o non) per i vari thread... In definitiva non devono poter mai accadare due scritture contemporanee, una lettura contemporaneamente ad un scrittura, due letture contemporanee sono ammesse... Ovviamente ci si deve mettere mentalmente nel caso peggiore possibile... Inoltre bisogna garantire (e questo si fa con una buona progettazione) che non ci sia mai starvation: ovvero la possibilità che un thread resti in attesa infinita di una risorsa condivisa... |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Quote:
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
|
#9 | |
|
Messaggi: n/a
|
Quote:
Windows (ed altri) invece, gestisce i thread come entità separate dai processi e provvede in modo "nativo" a gestire e condividere le suddette informazioni alla creazione del thread. |
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
http://www.hwupgrade.it/forum/showpo...1&postcount=85
__________________
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 |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
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 |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Junior Member
Iscritto dal: Dec 2005
Messaggi: 11
|
grazie.....ho dato un po' un'occhiata in giro e ho provato a buttar giù qualcosa.....solo che nella mia testa la vedo una cosa ancora un po' troppo teorica....potrebbe andare bene come base???e per mostrarne l'utilizzo come posso fare???scusate ma, se non si fosse capito, sono alquanto confuso.....
Qui c'è quello che ho fatto finora: Codice:
#include "semfun.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define N 10 // num risorse
#define NP 10 // NP numero di processi
semaforo mutex initial 1;
semaforo priv[NP] initial 0;//semafori proc
int risorse= N; // cont ris
int n_blocc=0; //cont processi bloccati
boolean proc_bloccati[NP]; //definiz proc bloccati
allocazione(int proc, int k)
{
down(mutex);
if (risorse<k)
{
n_blocc++;
proc_bloccati[proc]=true; //processo proc bloccato
up(mutex);
down(priv[proc]);
n_blocc--;
proc_bloccati[proc]=false; //processo proc sbloccato
}
risorse=risorse-k; //alloca k risorse
up(mutex);
}
restituzione()
{
int j;
down(mutex);
risorse=risorse+k;
if (risorse>=k && n_blocc>0)
{
j=0;
while (proc_bloccati[j]==false)// scegli processo da attivare
j++;
up(priv[j]);
}
else
up(mutex);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:05.











)








