多线程

本文详细解释了程序、进程和线程的概念及其区别,包括它们如何在计算机内存中运行,以及多线程编程的实际应用示例。通过具体代码演示了如何利用线程进行并发操作,并介绍了线程同步的基本手段——互斥锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序,进程线程的区别:

程序:以文件的形式存储在磁盘上的,他是计算机指令的集合;

进程:一个正在运行的程序实例,是一个程序在其自身的地址空间中的一次执行活动;

进程使用系统中的内存,而程序不使用内存, 不能被系统调度, 也不能作为独立运行的单位,所以它不占用系统的内存;

进程是不活泼的。进程从来不执行任何东西,他只是线程的容器。若要使进程完成某项操作,它必须拥有一个在他的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。

单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码;

每个进程至少有一个线程,来执行进程的地址空间中的代码,当创建一个线程是,操作系统会自动创建这个进程中的第一个线程,称为主线程,如main函数,WinMain函数,然后该线程可以创建其他线程;

线程:因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,而尽量避免创建新的进程;多

多线程例子:

#include <iostream>
#include <windows.h>
using namespace std;
int i = 1000;
DWORD WINAPI fun1(
	LPVOID lpParameter
);
DWORD WINAPI fun2(
	LPVOID lpParameter
);

HANDLE hMutex;
int main()
{
	
	HANDLE Thread1;
	HANDLE Thread2;
	Thread1 = CreateThread(NULL, 0, fun1, NULL, 0, 0);
	Thread2 = CreateThread(NULL, 0, fun2, NULL, 0, 0);
	CloseHandle(Thread1);
	CloseHandle(Thread2);
	hMutex = CreateMutex(NULL, FALSE, NULL);//创建互斥对象
	while (i>0)
	{
		WaitForSingleObject(hMutex, INFINITE);//如果hMutex为有信号状态,进入函数, 如果是无信号状态等待INFINITE个时间;
		cout << "主线程" << i << endl;
		i--;
		ReleaseMutex(hMutex);//释放互斥对象
	}
	return 0;
}


DWORD WINAPI fun1(
	LPVOID lpParameter
)
{
	while (i>0)
	{
		//INFINITE为一直等待,
		WaitForSingleObject(hMutex, INFINITE);//如果hMutex为有信号状态,进入函数, 如果是无信号状态等待INFINITE个时间;
		cout <<"fun1线程"<< i << endl;
		i--;
		ReleaseMutex(hMutex);//释放互斥对象
	}
	return 0;
}

DWORD WINAPI fun2(
	LPVOID lpParameter
)
{
	while (i>0)
	{
		WaitForSingleObject(hMutex, INFINITE);//如果hMutex为有信号状态,进入函数, 如果是无信号状态等待INFINITE个时间;
		cout << "fun2线程" << i << endl;
		i--;
		ReleaseMutex(hMutex);//释放互斥对象
	}
	return 0;
}


引入互斥对象

CreateMutex(NULL, FALSE, NULL);
是为了让线程同步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值