2012-02-14 30 views
10

Tengo un error extraño.boost mutex error extraño con miembro privado

class INST 
{ 
public: 
boost::mutex m_mutex; 
}; 

std::vector<INST> m_inst; 

C2248 de error: 'boost :: :: mutex mutex': no ​​se puede miembro privado de acceso declarado en la clase 'impulso :: mutex' ver la declaración de 'boost :: :: mutex mutex'

Sin embargo, mi otra clase está bien,

class VIEW 
{ 
public: 
boost::mutex m_mutex; 
}; 

VIEW m_view; 

¿Echo algo aquí? Intenté declarar a m_mutex como privado, pero aún tengo el mismo problema.

Gracias.

+0

Los errores de C++ suelen ser complejos y detallados. Asegúrese de copiar el mensaje de error completo (podría ser un error múltiple XXX: líneas) ya que cada línea agregará un poco de información al rompecabezas (en este caso, probablemente el hecho de que es el constructor de copia que no está disponible o que encontró el error al definir el constructor de copias –

+0

Gracias David, soy un novato en la programación de hilos múltiples, ¿podría sugerir una solución para el problema? Tengo un vector compartido, y varios hilos pueden acceder a diferentes partes del vector al mismo tiempo. – 2607

Respuesta

18

Los mutexes no pueden ser copied, por lo que no puede colocarlos en un contenedor que copie el mutex. El error probablemente se refiere al constructor de copia privada del mutex.

+0

Gracias, nos pueden sugerir una solución para el problema? Tengo un vector compartido, y varios subprocesos pueden acceder a diferentes partes del vector al mismo tiempo. – 2607

+0

Punteros de lugar (inteligentes) para el mutex o la clase que contiene el mutex en el contenedor en su lugar. O proteja todo el vector con un mutex. (O use una matriz si es apropiado para su tarea) – nos

+0

Corrígeme por favor f Estoy equivocado, si uso un mutex global para proteger todo el vector, ¿significa que solo un hilo puede acceder al vector completo a la vez? Estoy tratando de permitir que varios hilos accedan a diferentes partes del vector al mismo tiempo. Gracias. – 2607

2

Me doy cuenta de que esta pregunta es muy antigua, pero me topé con el mismo problema el día de hoy y Google me llevó hasta aquí. Sin embargo, la solución propuesta no me convenía, así que quería describir cómo la resolví en mi propio proyecto.

Tengo un vector de clases como usted, y las administro de tal manera que una vez que el acceso a los miembros del vector comienza, el vector nunca volverá a cambiar el tamaño. Sin embargo, quiero la capacidad de cambiar el tamaño del vector unas pocas veces al inicio antes de que comience el procesamiento. También quería permitir que los hilos funcionen en cualquiera de los elementos del vector de forma aleatoria.

Resolví el problema con el mutex asignándolo dinámicamente en el constructor de la clase y destruyéndolo en el destructor. Naturalmente, si hace esto, debe garantizar que nadie está esperando en el mutex cuando lo elimine. Esta solución funciona para mí porque nunca copio objetos del vector, solo accedo a ellos dentro del contenedor.

Cuestiones relacionadas