|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 7152
|
[C] File lock
Ciao ragazzi,
ho implementato un lock su file tra vari processi con le struct flock. Però ho un problema: alcuni processi riescono a terminare, altri no, si bloccano in attesa. Come se qualcuno non rilasciasse il lock sul file. Questo è il codice in cui definisco la struttura: Codice:
struct flock fl;
fl.l_type= F_WRLCK; // tipo di lock
fl.l_whence = SEEK_SET; // offset
fl.l_start = 0; // Offset per l_whence
fl.l_len = 0; // lunghezza
fl.l_pid = getpid(); // PID del processo
fd = open("/out",
O_WRONLY | O_CREAT,0777);
Codice:
int write_plane(struct flock*fl,float*plane,int fd, int*local_planes, size_t*dim_mat, int me, int num_plane) {
int fun;
int jump, ris;
int dim_plane = dim_mat[0]*dim_mat[1];
fun = fcntl(fd, F_SETLKW, fl); // attendo per avere il lock
jump = 0;
if( me == 0) jump = dim_plane*num_plane*sizeof(float);
else {
for(int i=0; i < me; i++) jump += (dim_plane*local_planes[i])*sizeof(float);
jump += dim_plane*num_plane*sizeof(float);
}
lseek(fd,jump,fl->l_whence);
ris = write(fd,plane,dim_plane*sizeof(float));
fl->l_type = F_UNLCK; /* cambio il lock */
fcntl(fd, F_SETLK, fl); /* sblocco la regione */
return ris;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:34.



















