|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
[C] - una definizione
non mi è chiaro cosa definisce questa sotto:
EXTERN struct proc *pproc_addr[NR_TASKS + NR_PROCS]; #define NR_TASKS 4 #define proc_addr(n) (pproc_addr + NR_TASKS)[(n)] e poi se questa assegna a xp il risultato della chiamata di una funzione oppure, se questo proc_addr(xp->p_sendto) è un assegnamento che non ho mai visto ? xp = proc_addr(xp->p_sendto); A me sembra più una chiamata di funzione grazie Ultima modifica di misterx : 06-06-2009 alle 18:22. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
No è una semplice (
Ovvero una macro con parametro, che sembra una chiamata a funzione ma che in realtà è una trappola per topi Scherzi a parte, essendo una define, va interpretata così: Codice:
#define proc_addr(n) (pproc_addr + NR_TASKS)[(n)] regola: #define <identifier>(<parameter list>) <replacement token list> Codice:
xp = proc_addr(xp->p_sendto); Codice:
xp = proc_addr + NR_TASKS[(xp->p_sendto)]; <DISCLAIMER MODE> Si declina ogni responsabilità per le eventuali fantasticherie espresse in questo post (attendi lumi più precisi). </DISCLAIMER MODE>
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 03-06-2009 alle 14:02. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Edit: già corretto
Ultima modifica di ||ElChE||88 : 03-06-2009 alle 14:05. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
Quello che non mi suona è che [(xp->p_sendto)] quello tra parentesi è un ....... anzi mi coorreggo: non è un puntatore ma un intero che rappresenta il numero del processo Quindi l'assegnamento xp = proc_addr + NR_TASKS[(xp->p_sendto)]; fa puntare xp a proc_addr + indirizzo del processo interessato
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
up
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
in questo scorcio di codice si dice che il wile verifica eventuale deadlock tra il chiamante e la destinazione ma anche tra gli altri processi: il punto è che non vedo nulla, parti di codice e solitamente '++' che incrementi alcun puntatore
Codice:
07605 /* Check for deadlock by 'caller_ptr' and 'dst' sending to each other. */
07606 xp = dst_ptr;
07607 while (xp->p_rts_flags & SENDING) { /* check while sending */
07608 xp = proc_addr(xp->p_sendto); /* get xp's destination */
07609 if (xp == caller_ptr) return(ELOCKED); /* deadlock if cyclic */
07610 }
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Codice:
xp = proc_addr(xp->p_sendto);
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
faccio un pò di ordine
EXTERN struct proc *pproc_addr[NR_TASKS + NR_PROCS]; #define NR_TASKS 4 #define proc_addr(n) (pproc_addr + NR_TASKS)[(n)] xp = proc_addr(xp->p_sendto); come si trasfrorma quindi xp ? Cioè, cosa gli viene assegnato ? Ultima modifica di misterx : 06-06-2009 alle 18:25. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
scusate ma ci sono arrivato dopo un pochino
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:41.




















