Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/05/2013, 12:08
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 5 meses
Puntos: 28
Respuesta: Pthread tipo c -> c++

Cita:
yo vengo de programar microntroladores por eso es que de c++ solo conozco lo mas básico y tenia alguna experiencia en visual basic pero para este ultimo no hay que conocer mucho de POO para usarlo .y tengo un concepto de las interrupciones o eventos que no se si aplican tambien al c++ de pc. y es que si en medio del código que atiende una interrupción se presenta otro evento del mismo tipo este debe quedar en cola y sera atendido cuando se finalice la rutina de servicio.
C++ no incluye ninguna rutina de multihilo, por lo que no hay ningun sistema de interrupciones/eventos detrás. La programación multihilo es controlada por librerías externas (en este caso pthread). Normalmente escrita por el propio sistema operativo (no puedes usar pthread en Windows por ejemplo).

Cita:
esto lo pregunto por que los pthreads que creo se ejecutan de manera "paralela" por lo que me surge la pregunta de que ocurre si dos o mas pthread acceden la caja de texto y quieren escribi "Aqui estoy"
Para evitar esto, pthread dispone de una herramienta: mutex (semáforo). La idea es mirar el semáforo antes de acceder a cualquier dato compartido, si está en rojo se esperará. Si está en verde pasará y lo pondrá en rojo (es tu responsabilidad desbloquear el semáforo cuando termines la operación).

Puede que ya sepas algo sobre tema, pero te pongo un ejemplo por si las moscas:

Código C++:
Ver original
  1. pthread_mutex_t mutex; // identificador mutex (variable global)
  2.  
  3. void* Hilo(void* param)
  4. {
  5.  
  6. // Inicio del hilo
  7.  
  8. pthread_mutex_init(&mutex, NULL); // creando mutex (por defecto esta desbloqueado)
  9.  
  10. variable = variable*2+3; // operaciones ajenas
  11.  
  12. //...
  13.  
  14. // quiero acceder a un recurso compartido.
  15.  
  16. pthread_mutex_lock(&mutex); // comprueba el mutex, si esta libre lo bloqueará, si no esperará a que se ponga en verde
  17.  
  18. acceder_recurso_compartido();
  19.  
  20. pthread_mutex_unlock(&mutex); // desbloqueamos el mutex
  21.  
  22. }

En lugar de variable global puedes pasar su dirrecion como paramétro (mismo metodo que con la clase).

Última edición por amchacon; 22/05/2013 a las 12:26