在Windows下用VS编程多线程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44065088/article/details/102672395
#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值是不定的

线程的执行具有异步性,就是说是随机执行的 没有准确的先后关系,看下面的执行就知道了

创建的线程的顺序和线程执行完的顺序都是随机的

在接下来的博客里,我会更新进程和线程的区别

猜你喜欢

转载自blog.csdn.net/qq_44065088/article/details/102672395