多线程的执行问题!!(50分)

  • 主题发起人 主题发起人 随便看看
  • 开始时间 开始时间

随便看看

Unregistered / Unconfirmed
GUEST, unregistred user!
TThread1.create(false);
TThread1.create(false);
这两条语句是同时执行的嘛??如果还是按照传统的顺序执行,等一个线程执行完毕再执行下一个线程,那么就不存在线程同步的问题了呀!!
另外api函数sleep(dwMillisecongds:DWORD)到底是如何理解的??书上说是用来告诉操作系统,当前的线程在参数指定的时间内不需要分配任何cpu时间,我有点理解不了!sleep是用在线程的Execute过程中的。
 
你是不是看了d6開發人員指南。這本書有詳細的解說。
可以采用臨界區或是互斥量嘛
 
两条语句,在时刻上非同步,在时段上是同步的,毕竟只有一个CPU(除非是两个)。
sleep可以用在你需要的任何地方,当他被调用后,在参数指定的时间内不需要分配任何cpu时间,对于线程而言,线程停止,不会产生事件,相当于空闲状态;当调用结束,则恢复正常状态。
 
当然不是同时执行的啦
先TThread1.create(false);后TThread1.create(false);
定义主线程为mainthread也即执行代码
TThread1.create(false);
TThread1.create(false);
的线程
过程描述如下:
mainthread先创建tthread1,tthread1已经可以执行,参与获得cpu时间。
mainthread和tthread1可以参与竞争cpu时间
当mainthread得到cpu时间,执行TThread2.create(false),tthread2可以参与执行,参与竞争cpu时间
最后有三个线程mainthread,tthread1,tthread2可以参与竞争cpu时间
sleep表示执行sleep的线程在执行sleep后的dwMillisecongds时间内,处于僵死状态
不参与竞争cpu时间.
过程是该线程,定义为X
X执行sleep,然后将控制权交给windows,
windows重新分配谁将获得cpu时间,由于X处于僵死状态,windows将不理会线程X,
只给其他的线程分配cpu时间.
windows分配cpu时间的时间间隔是由windows操作系统自己决定的,你决定不了.
当然你可以将某个线程的级别提高,有助于其获得cpu时间
在dwMillisecongds过后,X不在处于僵死状态,windows将其列入考虑范围,
X可以参与竞争cpu时间
如果想了解更详细的知识,可以参阅unix操作系统的书,windows和unix差不多.
 
同意楼上的观点,很精辟的
 
TThread1.create(false);
TThread1.create(false);
语句是串序执行,而线程是并行处理.(对于多线程程序,可能实际上是交替执行,但这和程序逻辑没有关系,比如CPU可能是超线程或者多个CPU)
 
22228888:我正是在看d5开发人员指南嘛,我知道可以用临届区、互斥和信号量,我是在看他没有采用这些方法时候的代码嘛!
那么是不是可以这么简单的理解:就是第一个线程创建以后,在它的excecute执行的时候,第二个线程也创建,并且执行excecute,而不是等第一个线程的excecute执行完毕的时候才开始创建第二个线程?而正是因为两个线程在逻辑上同时执行excecute,那么就造成了在excecute中修改全局变量以后,得出的全局变量的结果会跟预期的结果不同?
 
TThread1.create(false) 就是建立一个线程,并且立即开始运行,(被分配cpu时间)
 
还有嘛?
 
...........
1。TThread1.create(false);
2。TThread1.create(false);
.............
这两条语句是同时执行的嘛??
======================================
我来回答上面的问题,这个和普通的函数调用是类似的,就是
先调用1。TThread1.create(false);转去执行create里面的代码创建一个线程,注意,仅仅是创建,然后返回
然后调用2。TThread1.create(false);转去执行create里面的代码创建一个线程,注意,仅仅是创建,然后返回
需要注意的是TThread1.create(false);仅仅完成线程的创建并且让他跑起来,其他的不管的
======================================
我觉得,针对您的问题,lijun4183, 说的很详细了。再仔细看看。。。。 :)
 
后退
顶部