版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
#include <Windows.h>
#include <iostream>
#define THREAD_NUM 10
using namespace std;
static int times = 0;
DWORD WINAPI Thread_Test(void* plgram)
{
int tmp = *(int*)plgram;
printf_s("%d 进程爸爸, 我来啦!\n", tmp);
for(int i = 0; i < 100000 ; i++)
times++;
printf_s("**** %d 进程爸爸, 我没啦!**** \n", tmp);
if (plgram) free(plgram);
return 0;
}
int main(int argc, char* argv[])
{
int* p = nullptr;
for (int i = 0; i < THREAD_NUM; i++) {
p = new int(i + 1);
if (!p) continue;
// 线程ID
DWORD threadID; // unsigned in <=> DWORD (32位的系统中)
// 线程的句柄
HANDLE hThread;
hThread = CreateThread(NULL, 0, Thread_Test, (void *)p, 0, &threadID);
}
Sleep(10000);
cout << times << endl;// 这个times并不是我门期望的那样美丽
system("pause");
return 0;
}
注意这个times是这个进程中的线程共享的资源 ,这里没有上互斥锁,所以times值是不定的
线程的执行具有异步性,就是说是随机执行的 没有准确的先后关系,看下面的执行就知道了
创建的线程的顺序和线程执行完的顺序都是随机的
在接下来的博客里,我会更新进程和线程的区别