Varie ed eventual
Luca Giuzzi
giuzzi a dmf.bs.unicatt.it
Gio 22 Feb 2001 17:22:02 UTC
1. la syscall __clone e' una brutta bestia ;)
piu' leggera di pthreads? Sicuramente si'... attento pero' che
printf non e' rientrante come default (a quanto mi ricordo) e questo
potrebbe darti qualche problemuzzo.
Un esempio (orribile) di clone e' il seguente:
/* Esempio di clone */
#include<stdio.h>
#include<sched.h>
int i;
int in_cloned()
{
while (1) {
i++;
usleep(5000);
}
}
int main()
{
void **stack1;
i = 1;
stack1 = (void **) malloc(64);
__clone(in_cloned, stack1, CLONE_VM, NULL);
sleep(2);
printf("In main...\n");
while (1) {
printf("%i\n", i);
sleep(1);
}
}
la funzione in_cloned() viene esseguita nel secondo thread e incrementa
la variabile "i". Il thread principale si preoccupa di stamparne il
valore.
[il codice che configura i 2 processi con fork sarebbe leggermente
diverso, a causa della diversa sintassi di fork()...
/* NON FUNZIONA ;)) */
int main()
{
void **stack1;
i = 1;
stack1 = (void **) malloc(8192);
if(!fork())
{ in_cloned(); }
printf("In main...\n");
while (1) {
printf("%i\n", i);
sleep(1);
}
}
ma, come dice il commento, non funziona: la copia del programma in cui
viene eseguita in_cloned() non condivide lo spazio indirizzi con il
programma principale, anche se i e' una variabile globale]
P.S.
Per i puristi: liberero' le malloc quando while uscira' :)))
Ciao,
lg
Maggiori informazioni sulla lista
Lug
|