|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
[C/C++] File locking tra pthreads
Cercando qua e là non mi è mai capitato di incontrare una funzione equivalente al LockFile di windows, cioè che faccia il lock esclusivo o condiviso tra threads (anche di diversi processi) per i pthreads
Ora, mi trovo ad averne bisogno e mi chiedevo, non c'è proprio niente che faccia al caso mio e sarò costretto a inventarmi improbabili combinazioni di flock (o fcntl, insomma lock dei file tra i processi) e rwlock o c'è qualcosa che posso usare direttamente? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Prova a guardarti la struttura pthread_mutex_t e le varie funzioni:
http://linux.die.net/man/3/pthread_mutex_lock |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
ah ecco, perfetto, pthread_rwlockattr_setpshared fa al caso mio, thank you
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
in realtà non fa al caso mio come credevo, per il semplice fatto che è necessario condividere la memoria in cui è allocato il lock per poterlo utilizzare.. ma non c'è una soluzione standard? insomma mi sembra un problema tipico quello di lockare un file, eppure non trovo niente che faccia quel che voglio :/ (cioè l'equivalente di flock, fcntl o lockf per i thread)
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
perché flock fa mutua esclusione tra i processi, non tra i thread di uno stesso processo, ad esempio
alla fine penso che userò un segmento di memoria condiviso in cui mettere una qualche struttura dati che contiene i miei rwlock indicizzati per numero di inode a questo proposito, l'ideale sarebbe una std::map.. ma c'è qualche modo per allocare un oggetto dove dico io (nel mio caso, nel segmento che prendo con shmget), e posso essere sicuro che non venga allocato niente al di fuori? ad esempio che non ci siano "new" all'interno, che sarebbero un problema |
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Quote:
In ogni caso per il discorso della map dovresti passarle un allocatore tuo (che vada ad allocare dalla memoria condivisa), non una passeggiata.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
||
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
Quote:
ok, sembra abbastanza complicato in effetti gestire correttamente la memoria in questo modo.. magari mi conviene usare una più semplice hash table ![]() per altro avrei anche il problema che per fare molte cose (ad esempio inizializzare gli rwlock con pthread_rwlock_t) dovrei lockare il segmento, e mi sembra di capire che non sia proprio un'operazione standard, e comunque richiede i privilegi di root (che potrebbe anche andare bene per il server, ma per il client richiedere i privilegi di root mi sembra esagerato) ps: soluzioni meno complicate sono sempre molto bene accette
Ultima modifica di tuccio` : 02-04-2011 alle 17:30. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Bernaschi? Io sto lavorando ad un server SMTP/POP con simili caratteristiche, e sono incappato nello stesso problema. Casomai trovassi una buona soluzione lo scriverò qui (o casomai l'abbia trovata tu, condividila
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
sì sì, progetto consegnato etc, manca solo la verbalizzazione
Ultima modifica di tuccio` : 24-06-2011 alle 16:44. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:48.





















