程序 进程 线程 初次多线程

本文详细解释了操作系统中进程与线程的概念,包括它们如何在虚拟地址空间中独立工作,以及如何通过线程实现高效并行计算。通过实例展示了如何创建和管理线程,以及线程之间的通信和资源共享。

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

一个程序可以对应多个进程 如 记事本可以打开好多个

一个进程也可以同时访问多个程序


每个进程有独立的虚拟地址空间,不同进程内,即使使用相同内存地址实际也是不同的物理内存


进程由两部分组成

1 内核对象

2 地址空间  包含所有的可执行模块 或 DLL模块的代码和数据 还包含 栈(stack)和 堆(heap)


真正执行代码的是线程,进程只是线程的容器,一个进程可能有多个线程,第一个线程称为主线程,就是main函数


线程在进程中创建,在进程的地址空间中分配内存,供线程的栈使用.,线程可以访问进程内核对象的所有句柄.

单个进程中的多个线程之间非常容易通信

线程内存开销比进程少,因此多采用线程,避免新进程


操作系统为每一个线程安排一定的CPU时间--时间片.每个线程在自己的时间内运行,因为时间片非常短,就好像多个线程同时运行一样

如果计算机拥有多个CPU,线程就真正意义上同时运行了


//简单举例======================================================================================

#include <Windows.h>
#include <iostream>
#include <conio.h>
using namespace std;

DWORD WINAPI m_fun1Proc(LPVOID lpParameter);

void main()
{

cout<<"main thread is running"<<endl;
HANDLE hThread1;
hThread1=::CreateThread(NULL,0,m_fun1Proc,NULL,0,NULL);

for(char i='A';i<10+'A';i++)
{
cout<<i<<endl;
::Sleep(1000);
}

::CloseHandle(hThread1);
::_getch();
}

DWORD WINAPI m_fun1Proc(LPVOID lpParameter)
{
cout<<"thread1 is running"<<endl;
while(1)
{
static int x=0;
x++;
cout<<x<<endl;
::Sleep(1000);
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值