要离开实验室了,电脑上的好多小程序不忍心删,带走又没什么价值,就发到博客上来吧。
这事Windows下多线程并行计算的程序的框架,代码如下所示:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <windows.h>

  3. int array[50];

  4. DWORD WINAPI ComputeProc(LPVOID lp)
  5. {
  6.   int i;
  7.   int *p;
  8.   p = (int *)lp;
  9.   i = *(int *)lp;
  10.   printf("thread %d running.\n", i);
  11.   array[i] = 2*array[i];
  12.   
  13.   free(p);
  14.   return 0;
  15. }

  16. void ComputeF()
  17. {
  18.     int i = 0;
  19.     HANDLE handle[50];
  20.     
  21.     for(i = 0; i < 50; i++)
  22.     {
  23.         int *itmp = (int *)malloc(sizeof(int));
  24.         *itmp = i;
  25.         handle[i] = CreateThread(NULL, 0, ComputeProc, itmp, 0, 0);
  26.         //Sleep(10);//??10??
  27.     }
  28.     for(i = 0; i < 50; i++)
  29.     {
  30.         WaitForSingleObject(handle[i],INFINITE);
  31.     }
  32.     for(i = 0; i < 50; i++)
  33.     {
  34.         CloseHandle(handle[i]);
  35.     }
  36.     printf("all threads execute complete.\n");
  37. }

  38. int main()
  39. {
  40.     int i = 0;
  41.     for(i = 0; i < 50; i++)
  42.     {
  43.         array[i] = i;
  44.     }
  45.     
  46.     ComputeF();
  47.     
  48.     for(i = 0; i < 50; i++)
  49.     {
  50.         printf("%d ", array[i]);
  51.     }
  52.     return 0;
  53. }
需要注意的是,多线程中并行的部分如果访问到同一变量,则需要加上锁,这里由于通过参数确定了每个并行部分访问的变量不会冲突,所以这里没有加。


09-12 18:13