[C con Clase] vectorizar matrices & Threads

Steven Davidson srd4121 en njit.edu
Mar Feb 24 23:26:07 CET 2009


Hola Alejandro,

Alejandro Vázquez Otero wrote:
> Creo que la pregunta quedaria mas sencilla si elimino todo el
> "porque" deseo hacerlo, y voy directamente al grano. Asi que aqui va;
> 
> tengo la siguiente lista de vectores  -con estos nombres exactamente
> y no me valen otros-
> 
> float matriz1[10] ,matriz2[10], ...,matriz10[10];
>  
> Y quiero recorrer TODOS los vectores en un bucle for.
> 
> Como puedo codificarlo?
> 
> Con esto: for (i=0; i<10; i++)  {matriz1[i]=operaciones;} solo
> recorro los elementos de un vector pero como puedo codificar en un
> bucle for que pase de vector al siguiente?
> 

Necesitarás usar memoria dinámicamente adjudicada para crear cada 
array/vector. Por ejemplo,

typedef float vector_t[10];

vector_t *pMatriz[10];

Posteriormente crearíamos cada 'vector_t' explícitamente para cada 
elemento de 'pMatriz'. Por ejemplo,

for( int i=0; i<10; i++ )
   pMatriz[i] = new vector_t;

Aunque cada vector exista por separado en memoria, realmente estás 
usando el array 'pMatriz' para acceder a cada uno. Esto continúa el 
mismo problema original.


De todas maneras, el problema que mencionas originalmente por el uso de 
hilos no debería ser tan problemático si sólo usas esta matriz para 
lectura. También es cierto que las bibliotecas y plataforma que estés 
usando influyan en estos problemas de acceso que mencionas. Te puedo 
decir que bajo MS-Windows, puedes usar 'VirtualAllocEx()' para crear 
memoria para tu proceso, el cual creará varios hilos que pueden acceder 
al espacio virtual de su mismo proceso. Como verás, no hay problema de 
acceso.

Si de verdad tienes problemas serios de acceso porque varios hilos están 
intentando acceder al mismo valor, entonces mantén un hilo principal 
para gestionara los demás. Esto viene a ser lo que te decía Programante 
cuando mencionó semáforos, secciones críticas, etcétera para resolver el 
problema de sincronización.


Espero que esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase