多线程对于现在的编程来说已经很普遍了,但是对于我来说还是一个比较新的东西。之前只是了解了c++的基础知识,并且都是基于单任务的。虽然之前对多线程也略有耳闻,但是理解的不深,现在提前看到这一章,把自己学到的知识列举一下。一来是总结一下,看自己是否真的了解了,二来是对新学习多线程的同学有所帮助。
并发的概念:把一个程序分割成若干个分开的、独立运行的子程序。有点类似弹钢琴,串行的方法是只用一个手指头弹奏,并行的方法是十个手指头一起弹,这中间就牵扯到协作和互斥。
编写并发程序其实就是在不同线程中间协调对资源的使用。就是让你的十个手指头知道该弹哪个键,大家分配好了,就能弹奏出美妙的曲子来了。
并发编程很难,就像学弹琴一样。好吧,我不弹琴,突然想起来,就像打字一样。
稍稍举个例子吧。现在你要在屏幕上打印一行“asdf jk;l "字符串,如果用一个手指头敲的话,你可能会用10s的时间,如果你用10个手指头敲的话,并且协调好这十个手指头,那么可能2s钟就完成了。
你可以采取策略保证打印的顺序,不然,你打印出来的可能是”jkdsl;a "。这就要线程间的协作了。
除了用并发看起来比串行快一些之外,另一个好处就是可以产生一个可做出响应的界面,还有,优化信息的吞吐量。
多线程:CPU的小把戏,分配时间片给不同的线程,欺骗你的大脑。
希望能对多线程有个大致的了解。
C++中的并发
C++标准并不支持多线程(并发),所以你看不到标准库中有多线程库。为了学习多线程就要自己找一些库。不过所幸,基本上所有的库对于多线程的处理方法是类似的。那就按本书中示例的ZThread来学习吧。
ZThread的下载:
http://zthread.sourceforge.net
ZThread的安装:
书上写的是Linux下的安装,我用的VS2008, 也是在网上查到的方法。
首先,下载下来源文件,
1. 创建一个Win32 Project,写上名字,OK
2. 弹出来一个对话框,在Application Setting里面的Application type里面学则Static library,Finish
3. 右键点击工程,点Properties, 在Configuration Properties-〉C++->Additional Include Directories 中选择ZThread-2.3.2\ZThread-2.3.2\include
4. 右键点击Source Files,将ZThread-2.3.2\ZThread-2.3.2\src中的cxx文件全部添加进去
5.
因为vs2008默认使用unicode,编译时会在如下代码处出现错误:
HINSTANCE hInst = ::GetModuleHandle(“Kernel32.dll");
修改成如下代码:
HINSTANCE hInst = ::GetModuleHandle(L“Kernel32.dll"); 6. 编译成功的话,那就把该.lib文件拷贝到C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib中去
7. 新建一个工程,右键点击工程属性,在Linker->input->Addtional Dependencies 中添加刚刚的.lib文件,至此,就可以用ZThread库了。
ok,这一章就先到此吧,下一次了解一下线程的创建,以及ZThread库中给我们带来的简化工具。
史蒂芬森地方
posted on 2012-05-14 18:03
Dino-Tech 阅读(760)
评论(0) 编辑 收藏 引用