-
-
[求助]win32多线程程序设计
-
发表于:
2009-2-12 15:57
3146
-
很多问题向诸君求教.望赐教.谢谢
具体下载地址:
win32多线程程序设计
自解是指我认为是正确的解答,请诸君验证之;
无解是指我不知道解答,请诸君答之
问题:
[1]37页的单链表例程在添加flag处理(40页)后,此处我理解来flag==1时为表示其他线程在使用链表,而flag==0则表示无线程在使用链表.书中说"如果context switch发生于#8和#9两行之间,另一个线程即可进入该函数--即使该函数设立了标记..."不解.
(1)如若在#8和#9行发生context switch可能失败?
自解:指另一个线程B刚好释放控制(即指完成链表操作之后flag被设定为0),此时发生context-switch则另一个线程C(不同于B且不同于本线程A)的线程可能会得到控制权.但是我以为这不是问题啊,因为线程C中应该也是使用while(flag!=0) ;这种语句,因此在flag被设定为0时,该线程应该也会通知到,进而运行.此时惟一要看的就是操作系统分配time slice到那一个线程罢了.
(2)如果context switch发生在#20或#21行之后,则函数可行失败?
有解:为什么讲#20或#21行之后?是否是讲刚好执行完#20或#21行之后.
无解:即使context switch发生于该处,flag的值没有为0,则其他调用该函数的线程不可能访问到链表,则不会出现前例的memory leak的情况.so why?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课