В данном примере:
#include <stdio.h>#include <process.h>#include <windows.h>#define THREADS 10#define ASIZE 10000000static LONG array[ASIZE];unsigned __stdcall ThreadProc( void *param ){ int i; for ( i = 0; i < ASIZE; i++ ) array[i]++; return 0;}int main( void ){ HANDLE hThread[THREADS]; unsigned dwThread; int i, errs; for ( i = 0; i < THREADS; i++ ) hThread[i] = (HANDLE)_beginthreadex( NULL, 0, ThreadProc, NULL, 0, &dwThread ); WaitForMultipleObjects( THREADS, hThread, TRUE, INFINITE ); for ( i = 0; i < THREADS; i++ ) CloseHandle( hThread[i] ); for ( errs=i=0; i<ASIZE; i++ ) if ( array[i] != THREADS ) errs++; if ( errs ) printf("Detected %d errors!\n", errs ); return 0;}
несколько потоков увеличивают значение элементов общего массива на: