[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