要离开实验室了,电脑上的好多小程序不忍心删,带走又没什么价值,就发到博客上来吧。
这事Windows下多线程并行计算的程序的框架,代码如下所示:
- #include <stdio.h>
- #include <windows.h>
- int array[50];
- DWORD WINAPI ComputeProc(LPVOID lp)
- {
- int i;
- int *p;
- p = (int *)lp;
- i = *(int *)lp;
- printf("thread %d running.\n", i);
- array[i] = 2*array[i];
-
- free(p);
- return 0;
- }
- void ComputeF()
- {
- int i = 0;
- HANDLE handle[50];
-
- for(i = 0; i < 50; i++)
- {
- int *itmp = (int *)malloc(sizeof(int));
- *itmp = i;
- handle[i] = CreateThread(NULL, 0, ComputeProc, itmp, 0, 0);
- //Sleep(10);//??10??
- }
- for(i = 0; i < 50; i++)
- {
- WaitForSingleObject(handle[i],INFINITE);
- }
- for(i = 0; i < 50; i++)
- {
- CloseHandle(handle[i]);
- }
- printf("all threads execute complete.\n");
- }
- int main()
- {
- int i = 0;
- for(i = 0; i < 50; i++)
- {
- array[i] = i;
- }
-
- ComputeF();
-
- for(i = 0; i < 50; i++)
- {
- printf("%d ", array[i]);
- }
- return 0;
- }
需要注意的是,多线程中并行的部分如果访问到同一变量,则需要加上锁,这里由于通过参数确定了每个并行部分访问的变量不会冲突,所以这里没有加。
阅读(763) | 评论(0) | 转发(0) |