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

Responder a