一个程序有几个线程, 线程是什么东东?

一个程序有几个线程, 线程是什么东东?,第1张

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

如题~

解析:

线程(thread, 台湾称 执行绪)是"进程"中某个单一顺序的控制流。也被称为轻量进程(ligheight processes)。计算机科学术语,指运行中的程序的调度单位。

线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。

在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的 *** 作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度(affinity)。
有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。

进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但您必须小心,确保它们不会妨碍同一进程里的其它线程。

我写的代码,没编译,你试试行不行
DWORD WINAPI SumThread(LPVOID lp)//求和线程
{
int sum=(int)lp;
for(int i=1;i<101;i++)
{

(sum)+=i;
}

return 0;//线程返回
}
DWORD WINAPI MulThread(LPVOID lp)//求阶乘线程
{
int mul=(int)lp;
for(int i=1;i<11;i++)
{

(mul)=i;
}
return 0;
}
DWORD WINAPI PrintThread(LPVOID lp)//打印线程
{

HANDLE handle ;

int sum=0 ;

int mul=1;

handle = CreateThread(NULL,NULL,SumThread,(LPVOID)&sum,NULL,NULL);//创建求和线程

CloseHandle(handle);//关闭线程句柄

handle = CreateThread(NULL,NULL,MulThread,(LPVOID)&mul,NULL,NULL);//创建求阶乘线程

CloseHandle(handle);//关闭线程句柄

printf("%d",sum);//打印和

printf("%d",mul);//打印阶乘

return 0;
}
void main()
{

HANDLE handle;

handle = CreateThread(NULL,NULL,PrintThread,NULL,NULL,NULL);

CloseHandle(handle);
}

可以的 使用SetThreadAffinityMask(hthread,number),其中number就是你想绑定线程到指定cpu的掩码例如number=1,即cpu 0,number=3,二进制0000 0011,表示cpu 0 cpu1


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13410709.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存