|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Linux, operazioni atomiche
esiste su Linux qualche funzione analoga alle varie InterlockedXxx di Win32? in particolare mi servirebbero la InterlockedIncrement e la InterlockedDecrement (devo gestire un reference count in concorrenza), ma sarebbe gradita anche una InterlockedCompareExchange
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
rm -rf /*
![]() una vera BOMBA ATOMICA ![]() ![]() P.S. notare quanto siano vicini sul tastierino numerico / e * e quanto è facile fare danni irreparabili quando si vuole fare rm -rf * e invece si fa rm -rf /* ![]() X fortuna io al max ho fatto crontab -r al posto di crontab -e ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cosa ti vieta di usare una semplice mutex ?
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
ovviamente non ho mai provato.. ma se lanci rm -rf /* da utente non ti cancella lo stesso tutti i tuoi file? (dato che sono quelli su cui hai i permessi) Non pensavo che se non hai i permessi adatti nella directory di partenza ti fallisce proprio l'esecuzione del comando.. solo che cmq non ci tengo a provare ![]() ne faccio già abbastanza di casini con linux.. soprattutto con VI e con la mia tastiera mista italiano/inglese (nel senso di tastiera inglese col layout in italiano ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In effetti...il fatto che ricorra l'albero potrebbe creare un problemi alla home directory, ma questo non ti impedirebbe di ricreare nuovamente l'utente.
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
ma tutti i tuoi dati, ovvero tutti i files su cui hai il permesso di scrittura, li perdi o no se lanci rm -rf /* anke se non sei root? ![]() Prova e fammi sapere per sicurezza ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
fiko il wordstar
![]() cmq ho appena provato e non c'è installato 'sto joe.. e non se me lo fanno installare qui al lavoro mi sa ![]() cmq ancora non ho capito che succede se lancio rm -rf /* da utente.... braso tutti i dati su cui ho accesso in scrittura o no? ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#10 | |
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 |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma siamo sicuri che in user space funzioni ugualmente ?
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sì sono dei semplici inline assembler con il prefisso "lock".
Ad es. mi è capitato di dover realizzare una classe tipo questa: Codice:
#ifdef __SMP_SUPPORT__ #define LOCK "lock " #else #define LOCK #endif class Atomic { private: volatile int m_val; public: ... void Inc(); int AddAndReturn(int val); ... }; inline void Atomic::Inc() { asm volatile( LOCK "incl %0" :"=m" (m_val) :"m" (m_val) ); } inline int Atomic::AddAndReturn(int val) { int old = val; asm volatile( LOCK "xaddl %0, %1;" :"=r"(val) :"m"(m_val), "0"(val) ); return val+old; }
__________________
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 |
![]() |
![]() |
![]() |
#14 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
si tratta del solito programma che sto facendo per l'università, quello col sorgente portabile per Windows e per Linux (l'ho quasi finito
![]() non so quanto "pesino" i semafori su Linux, ma certo è che su Win32 le InterlockedXxx sono molto più spedite di un mutex (cioè di un kernel object a tutti gli effetti). |
![]() |
![]() |
![]() |
#15 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() scrivere del codice assembly mi lega alla piattaforma: sicuramente non sarà richiesto che il programma giri su piattaforme diverse dagli x86 (penso che neanche lo farà andare su un processore a 64 bit), ma non so quanto piaccia al professore. per tenere il programma "leggero" potrei usare su Linux un pthread mutex al posto di un semaforo e su Win32 una sezione critica al posto di un mutex, ma in realtà non posso perché il reference count in questione deve essere condiviso tra processi. conclusivamente alla mia prima esperienza di sorgente portabile non posso che dire la seguente cosa: GNU/Linux sarà anche na meraviglia, sarà l'emblema della prima utopia realizzata della storia, sarà rulez, sarà FOSS, sarà powa, sarà winzozz sucksz e tutto quello che vi pare; ma che sia "un sistema fatto dai programmatori per i programmatori" * non credo proprio -.- a me Windows pare tecnologicamente molto più avanzato ![]() * frase ricorrente che tra l'altro ripeteva spesso il mio prof di laboratorio di sistemi 1 Ultima modifica di 71104 : 01-06-2007 alle 00:14. |
|
![]() |
![]() |
![]() |
#16 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
una volta c'ho provato... sono stato costretto per l'esame di laboratorio di sistemi 1... ma credevo che fosse soltanto na roba didattica ![]() |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Early Optimization is the root of all evil
Perché non usi le mutex su entrambi e festa finita ? Prima scrivi tutto e poi cerca di migliorarlo... |
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
|
Quote:
![]() io ogni volta che edito un file sotto ssh sono costretto ad usare quello schifo... e i primi tempi facevo tanti di quei danni che ci mettevano 10 minuti a riuscire a chiuderlo i miei colleghi che in teoria l'avrebbero dovuto sapere usare ... lo mandavo in LOOP ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#20 | ||||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Più al "compilatore" che alla "piattaforma", a meno che non devi scrivere anche per Sparc
![]() Quote:
Ok che l'asm è da evitare se possibile, ma hai trovato un ottimo esempio di utilizzo consigliato, che lo giustifica. Usando dei lock aggiungeresti un overhead assolutamente inutile. Inoltre, leggendo la documentazione di "InterlockedIncrement": http://msdn2.microsoft.com/en-us/library/ms683614.aspx trovi scritto: Quote:
Nota inoltre che Quote:
Quote:
Forse che portare del codice tra Windows e MacOS sarebbe più semplice? ![]()
__________________
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 |
||||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:00.