多线程学习笔记---基础篇
最近看J.J Hou译的<<Win32多线程程序设计>>和一本<<Windows环境下的多线程编程原理与应用>>一书,
边看边练书上的例子,初步有了一些了解,还有若干不明白的概念,特发贴求教:
1.经我试验,得出以下四条结论,不知对否?
无论是手动还是自动信号在有调用PulseEvent()的结果永远是无信号状态;
无论是手动还是自动信号在有调用SetEvent()的结果永远是有信号状态
无论是手动还是自动信号在有调用ResetEvent()的结果永远是无信号状态
由以上三条可得:
手动信号和自动信号的唯一区别即在于Sinaled之后所能响应的线程的个数?
(前者是若干个,后者仅为一个?)
2.我试验了一下,不知为何当thread1与thread2都在wait同一个mutex时都没有ReleaseMutex(),然而
两者都能同时运行,何解?
3.在J.J Hou译的<<Win32多线程程序设计>>书中有如下两段话不明白:
a.把一个const volatile变量传递给函数作为参数是合法的,如此声明意味着函数不能够
改变变量的值,但变量的值却可被另一线程在任何时间内改掉。
b.Windows的线程是事件驱动(Event driven)模式,而且常常返回到主消息循环中。
ps:感觉多线程下完全无法像单线程那样在脑子里"运行"程序了。
有点捉摸不住 的感觉。
问题点数:20、回复次数:7Top
1 楼wangyangcheng(矛盾)回复于 2005-06-16 20:58:21 得分 0
更新一点:
若SetEvent( 自动对象 )之后其处于有信号状态,当且仅当一个线程被此对象激活后,则此对象
即自动变为无信号状态。
以上对否???
那如此说来,PulseEvent()主要是针对手动信号所用的。对否?Top
2 楼wangyangcheng(矛盾)回复于 2005-06-16 21:27:58 得分 0
增加:
对于自动信号而言,使用SetEvent()和PulseEvent()的效果都是相同的。Top
3 楼Featured(我握着爱情的门票静静排队……)回复于 2005-06-16 21:34:45 得分 5
推荐<windows核心编程>,它讲的实在透彻Top
4 楼JohnTitor(贱畜)回复于 2005-06-16 21:40:51 得分 5
建议搂主看看windows核心编程里面的successful wait side effects一节,以上的问题在于那些WaitFor函数是否改变事件内核对象的状态Top
5 楼wangyangcheng(矛盾)回复于 2005-06-17 12:09:06 得分 0
Thanks!Top
6 楼itman1982(一生有你(李))回复于 2005-06-17 17:58:12 得分 5
windows 高级编程指南,出看一看.Top
7 楼aben456(金珠MERP)回复于 2005-06-19 01:09:36 得分 5
event只是一个红绿等
路上的车还要靠自己的眼睛来判断是否可以通行Top




