多线程编程问题

在开始讲述多线程编程问题前,我们先来了解一下线程和进程的概念。

进程:进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。

线程:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。线程是"进程"中某个单一顺序的控制流。也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。

线程与进程的区别:

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
4)二者均可并发执行.


线程没有自己的系统资源,故其开启和撤销的开销比进程小。因此开展多线程编程比开启多进程要节约资源和时间。另外在程序中某些耗时的操作如果加到主线程中执行则会引起主线程在执行这一任务时得等待其任务结束才能开展其他的工作。为了避免这个问题我们可以对这种费时的任务放到一个新开启的线程中,这样就可以让主线程脱离这种繁重的工作。

实例:

class MainServer
{
public:

int StartAllServer ();

//在定义线程前必须包含相应头文件

Thread m_tA1;    //实例化线程
void Proc();     //声明线程执行体

void MainServer::Proc()    //线程执行体
{
……//相关操作
}

int MainServer::StartAllServer()
{
//开启线程,执行proc()函数中相关操作
m_tA1.start(this, Proc);

//销毁线程

m_tA1.join();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值