2014-01-31 4 views
2

Я впервые опробовал многопоточность в C, и я, кажется, что-то делаю неправильно, надеюсь, что вы могли бы мне помочь. Вот мой код:Многопоточная проблема в C

#include "stdafx.h" 

#define MAX_THREADS 2 


int a[100000]; 
int b[200000]; 

void startThreads(); 

DWORD WINAPI populateArrayA(LPVOID data) 
{ 
    int i; 
    int* pA = (int*)data; 

    for(i = 0; i < sizeof(a)/sizeof(int); i++) 
    { 
     *pA = i; 
     pA++; 
    } 

    return 0; 
} 
DWORD WINAPI populateArrayB(LPVOID data) 
{ 
    int i; 
    int* pB = (int*)data; 

    for(i = 0; i < sizeof(b)/sizeof(int); i++) 
    { 
     *pB = i; 
     pB++; 
    } 
    return 0; 
} 

void startThreads() 
{ 
    HANDLE threads[MAX_THREADS]; 
    DWORD threadIDs[MAX_THREADS]; 

    threads[0] = CreateThread(NULL,0,populateArrayA,a,0,&threadIDs[0]); 
    threads[1] = CreateThread(NULL,0,populateArrayB,b,0,&threadIDs[1]); 

    if(threads[0] && threads[1]) 
    { 
     printf("Threads Created. (IDs %d and %d)",threadIDs[0],threadIDs[1]); 
    } 

    WaitForMultipleObjects(MAX_THREADS,threads,true,0); 

} 

int main(int argc, char* argv[]) 
{ 
    int i; 

    memset(a,0,sizeof(a)); 
    memset(b,0,sizeof(b)); 

    startThreads(); 

    return 0; 
} 

В этом коде массив «б», кажется, заселить штраф, однако массив «а» не делает. Извините, если ответ - это что-то глупое!

EDIT: Я только что попробовал снова, и оба массива - все '0'. Не совсем уверен, что происходит. Я использую Visual Studio, если это проблема отладки или что-то в этом роде.

Cheers.

+0

Итак, как выглядит '' '? – woolstar

+0

Все «0», поскольку они также инициализированы. Спасибо – Tmarsh2

+1

Странно. Я просто запустил этот точный код через Visual Studio 2010, и оба они выглядели отлично. – Philip

ответ

4

Последний параметр WaitForMultipleObjects должен быть INFINITE, а не 0. С 0 функция возвращает немедленно.

+0

Отлично. Спасибо за вашу помощь. – Tmarsh2

+0

странно, что он все еще отлично работает на моей системе. Может быть, мой процессор работает быстрее и способен завершить потоки. – Philip

+0

@ Tmarsh2 Вы радушны. Примите ответ. – manuell

Смежные вопросы