elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?] OpenMP Candados y secciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] OpenMP Candados y secciones  (Leído 2,042 veces)
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
[?] OpenMP Candados y secciones
« en: 19 Febrero 2015, 01:23 am »

Hola, tengo el siguiente programa donde servidor genera números y cliente imprime los datos recibidos, es decir, el cliente emite una petición, el servidor la lee, genera un numero y lo regresa al cliente, este ultimo lee el dato recibido.

Código
  1. #include <omp.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define NHILOS 2
  5.  
  6. void servidor();
  7. void cliente();
  8. int produce(int pet);
  9. void lee(int prod);
  10.  
  11. int pet=0, prod=0;
  12. omp_lock_t C1; //Candado Servidor
  13. omp_lock_t C2; //Candado Cliente
  14.  
  15. int main (int argc, char *argv[])
  16. {
  17.   int id;
  18.   srand (time(NULL));
  19.   omp_init_lock(&C1);
  20.   omp_init_lock(&C2);
  21.   omp_set_lock(&C1);
  22.   omp_set_lock(&C2);  
  23.   omp_set_num_threads(NHILOS);
  24.   #pragma omp parallel sections shared(pet,prod)
  25. {
  26. #pragma omp section
  27. {
  28.  printf(" Serv_id: %d\n",omp_get_thread_num());
  29.  servidor();
  30. }
  31. #pragma omp section
  32. {
  33.  printf("Clie_id: %d\n",omp_get_thread_num());
  34.  cliente();
  35. }
  36. }
  37.  
  38.   return 0;
  39. }
  40.  
  41. void servidor()
  42. {
  43. while(1)
  44. {
  45. omp_set_lock(&C1);
  46. prod = produce(pet);
  47. omp_unset_lock(&C2);
  48. }
  49. }
  50.  
  51. void cliente()
  52. {
  53. while(1)
  54. {
  55. pet = rand()%3;
  56. printf("Cliente genera la peticion: %d\n",pet);
  57. omp_unset_lock(&C1);
  58. omp_set_lock(&C2);
  59. lee(prod);
  60. sleep(2);
  61. }
  62. }
  63.  
  64.  
  65. int produce(int pet)
  66. {
  67. printf("Procesando petición: %d\n",pet);
  68. prod++;
  69. return prod;
  70. }
  71.  
  72. void lee(int prod)
  73. {
  74. printf("El servidor envia el producto: %d\n",prod);
  75. }

¿Cómo puedo implementar N clientes y 1 servidor? Ahora se tienen N tareas cliente() y un solo servidor que queda en espera de peticiones de algún cliente.¿Cómo creo las N tareas, sin mas con N hilos?

Ahora se tienen 3 candados: Cliente, Petición y Servidor y la funcion cliente es mas o menos asi:
 
Código
  1. void cliente()
  2. {
  3. while(1)
  4. {
  5. omp_set_lock(&C3); //Peticion
  6. pet = rand()%3;
  7. printf("Cliente genera la peticion: %d\n",pet);
  8. omp_unset_lock(&C1); //Servidor
  9. omp_set_lock(&C2); //Cliente
  10. lee(prod);
  11. omp_unset_lock(&C3)
  12. sleep(2);
  13. }
  14. }

Ya tengo las partes solo que no se como conectarlas, saludos!!


En línea

edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: [?] OpenMP Candados y secciones
« Respuesta #1 en: 19 Febrero 2015, 04:07 am »

Estoy probando con distintas secciones pero un mismo cliente siempre hace peticiones, no les deja a los demas intentar  :o

[re-ACTUALIZO] Hay un error, al iniciar #pragma omp parallel todos los hilos ejecutan cliente, por lo tanto no hay un solo servidor y todos quedan en espera.

En base al id se asigna el servidor y el resto son clientes, tambien hay que reajustar los candados o se seguira bloqueando, el detalle es que solo un hilo hace de servidor y el resto son clientes que hacen peticiones.
Código
  1. #pragma omp parallel private(id) shared(pet,prod)
  2.     {
  3. id = omp_get_thread_num(); //Numero de cada hilo
  4. if(id==0)
  5.                {servidor(id);}
  6.                cliente(id);
  7.     }
saludos.


« Última modificación: 20 Febrero 2015, 20:08 pm por edr89 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como puedo quitar candados
Software
Mr pom0 2 8,673 Último mensaje 17 Agosto 2006, 14:10 pm
por Barbala
Secciones en php
PHP
keype 4 7,324 Último mensaje 28 Mayo 2007, 00:29 am
por dominioswww
un par de secciones mas
Sugerencias y dudas sobre el Foro
peib0l 4 2,857 Último mensaje 25 Mayo 2007, 18:07 pm
por -Elkiot-
Sobre temas con candados y llaves.
Foro Libre
Gabriela 4 2,660 Último mensaje 29 Septiembre 2010, 01:25 am
por Zorronde
Problema con OpenMP en ubuntu
Programación C/C++
BeFree 0 1,671 Último mensaje 22 Junio 2013, 00:25 am
por BeFree
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines