谁能举个多线程的例子!(50分)

  • 主题发起人 主题发起人 dana
  • 开始时间 开始时间
不一定,看你的需要。
成员变量和全局变量的区别就在于成员变量可以在线程中随意修改而不必担心其它线程
的影响,就像我们前面讨论的那个nthread。
全局变量的修改则需要非常小心,因为多个线程时同时运行的,例如:
线程A
x := 1;
y := x;
线程B
x := 2;
线程C
x := 3;
以上x,y均为全局变量,三个线程同时运行,则线程A中的y等于多少?
答案是1,2,3都有可能!
因为当线程A的第一条语句运行完以后,很可能线程B和C插进来运行了一句,所以y的取值取决于当时
线程的运行顺序,而线程的运行顺又几乎是不可预见的,所以y的值也就不可预见。
如果x是成员变量的话,y的值就肯定是1。
综上所述,多个线程使用同一个全局变量的前提是所有的线程都不会去修改它,只是读而已。
如果多个线程一定要使用全局变量,则必须使用你自己问到过的临界区,但这会使编程变得很麻烦。
线程A访问全局变量前,先请求进入临界区,如果此时线程B正在临界区中,则线程A必须等待,直到
B离开,A进入以后可以修改全局变量,此时其它线程均无法进入临界区,直到A离开。
这是我自己对临界区的理解,你如果读过计算机专业的《操作系统》的话,这概念不难理解。但Delphi
中的临界区我也没用过,无法给出实例。
 
能帮我看一下这个吗?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=556446
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部