no entendi bien a que te referis con eso de "no tengo apuntado como
solucionarlo"
si te referis a poner el constructor de copia y el operador = ocultos, es
simplemente declararlos en el sector private
toda clase en c++ tiene un constructor de copia y un operador = por default:
en cada uno se hace una copia del contenido byte a byte
class Locking {
private:
Mutex &_m; //NOTA: ver que el atributo es *referencia*
Locking(const Locking&); //constructor de copia oculto
Locking& operator=(const Locking&);//operador de asignacion oculto
public:
Locking(Mutex &m):_m(m) { _m.lock(); } // se asigna referencia
virtual ~Locking() { _m.unlock(); }
};
Mutex deberia tener el constructor de copia y operador de asignacion ocultos
lo que puse arriba es para ejemplificar: si Mutex no tiene constructor de
copia, cuando se utilice el constructor de copia por default de Locking
desde afuera, el compilador se queja (lo mismo para el operador =)
para este caso, no seria necesario setearlos como privados para Locking (si
Mutex ya los tiene ocultos)
al setearlo como privado forzas a que no compile cuando se quiere hacer una
copia
Mutex m1;
Mutex m2 (m1); //no compila: constructor de copia oculto
Mutex m3 = m1; //no compila: operador de asignacion oculto
justamente con esto, no permitis que se instancien objetos por el que no
pasen por un constructor "normal"
si haces copias, justamente al mutex se le va toda la funcionalidad
lo mismo pasa con la clase que tenes Thread... no queres que hayan copias
por ahi
PD: si soy John
--------------------------------------------------
From: "Carlos Pantelides" <[EMAIL PROTECTED]>
Sent: Tuesday, April 29, 2008 11:03 PM
To: "Una lista para consultas deprogramacin" <[email protected]>
Subject: Re: [Prog] Inconveniente por concurrencia
Juan:
creo que tenes un problema con la clase mutex
en general, las clases mutex, thread, socket etc
tiene el constructor de
copia oculto (privado) al igual que el operador =
Muchas gracias, me imaginaba que por ahi anda la cosa,
pero no tengo apuntado como solucionarlo y en el
Stroustrup soy incapaz de encontrar nada.
deberia listar todos 1, y despues todos 2
porque el for esta dentro de la zona de codigo
critico
con esto no ganas nada (es lo mismo que hayas
ejecutado dos veces la misma
funcion desde un unico hilo)
Era exactamente mi propósito, que hubieran 11111... y
22222... no intercalados. El código que envié es
"irreal", solo para reproducir el error.
Gracias
Carlos Pantelides
PD Off topic: eres John Knight?
____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now.
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion
No virus found in this incoming message.
Checked by AVG.
Version: 8.0.100 / Virus Database: 269.23.6/1404 - Release Date:
29/04/2008 06:27 p.m.
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion