秒杀多线程系列学习总结

通过这两天对多线程的学习,查阅资料,来对我的理解做个总结,希望通过这篇文章来盒一些志同道合的朋友交流心得,同时也希望各位前辈能够指出我的错误,不到位,以及没有想到的地方。

每一个程序都有一个进程和至少一个线程,进程应在可执行文件向系统申请内存空间时被创建,而主线程则在调用wMain函数以前被创建,其他的的子线程则取决于线程被创建的位置。

在了解线程之前,我们应该先了解windows CPU处理线程的机制,下面说下我对它一个粗浅的认识:首先每个线程有会有一个时间片,CPU会通过这个时间片来确定处理线程的时间,当CPU在处理线程时,其他线程是处于挂起状态的,还有一个线程处于等待状态,当处理的线程的时间达到时间片上的时间时,CPU就会将线程挂起,然后处理正在等待状态的线程,一次为循环不断的处理线程,来实现我们所看到的多个线程或多个进程同时运行的情况。因此多线程相对于单线程在获取CPU处理资源的比例上会有很大的提升(当然创建线程也需要消耗时间和资源)。

因为同一进程的线程是能够访问相同的内存资源的,因此多线程也带来了一些问题,而要处理这些问题我们就需要了解熟悉互斥与同步的概念,那么如何理解同步也互斥呢?同步也互斥虽然字面的意思很明显不同,但是他们在实现原理上面是很相似的。他们的共同点:在处理某段区域的数据的时候,是不允许其他的线程进入该区域修改数据的,这样就使得了我们给出的数据不会被另外的线程所修改;而不同点:同步注重的是线程所修改的这个数据是否会在达到某种我们程序员所设置的条件之前被改变,而互斥注重的是线程在进入某一块保护的区域时如何去阻止其他的线程进入而影响线程本身的在这段区域所执行的操作。可以说同步关注的是两个线程之间的数据交流,而互斥关注的是两个线程操作同一数据而造成的影响。

同步与互斥是两种状态,而要实现同步或者互斥就需要我们用具体代码去实现。千万不要认为我用某个函数能实现同步宁外一个函数能实现互斥,而应该说我这段代码让某个线程与某个线程之间处于同步的状态或者让某个线程与其他线程处于互斥的状态,比方说Criticalsection(关键段)用于实现互斥的作用,Event(事件)常用于实现同进程 单对单 单对多 线程之间的同步,Mutex(互斥量)常用于实现多进程之间的互斥,semaphore(信号量)多用于 单对多 多对多 线程之间的同步。但是 并能说Event不能拿来做互斥,Event同样可以实现多个线程之间的互斥。

以上是我对同步和互斥的理解,以及多线程如何进行的粗浅认识。而多进程我们需要实现某种状态时需要用到的有Mutex(互斥量) semaphore(信号量) Event(事件) Criticalsetction(关键段),想要了解他们的函数,建议大家看http://blog.csdn.net/column/details/killthreadseries.html 这个秒杀多线程系列 。

希望各位前辈能支出为理解上的错误,以及补充些我没有想到一些问题。谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值