高手请进!!!!criricalsection同步多线程的原理是什么?(100分)

S

stanely

Unregistered / Unconfirmed
GUEST, unregistred user!
criticalsection可以同步多线程的访问,
是不是当只要有一个线程进入criticalsection以后,无论在离开之前对谁进行了访问,
哪怕不是什么全局变量,其他任何线程都被挂起?
如果不是这样,那么她怎么能够保证在criticalsection.enter和criticalsection.leave
之间对共享数据的访问呢?criticalsection怎么知道这之间谁是可能的“共享”数据?
难道是编译器的工作么?
 
A

alter

Unregistered / Unconfirmed
GUEST, unregistred user!
一般只对全局变量使用。
类似于锁,锁定数据区->操作数据->解锁数据区
 
X

xianjun

Unregistered / Unconfirmed
GUEST, unregistred user!
相当于是一个资源,它一次只能被一个人占有,别人想占有的时候必须等前面的人释放后
这样就确保同时只有一个线程对共享数据的访问了。
所以Enter与Leave一定是成对出现的。
 
S

stanely

Unregistered / Unconfirmed
GUEST, unregistred user!
我不是这个意思。
关键的是想知道:
当一个线程a通过criticalsection开始执行谋断代码访问x的时候,是阻塞所有通过criticalsection执行的其他线程,
还是通过criticalsection执行的并且访问了和x的时候才阻塞?不访问x就不阻塞?
有那么智能嘛?
 

Similar threads

回复
0
查看
662
不得闲
S
回复
0
查看
741
SUNSTONE的Delphi笔记
S
S
回复
0
查看
686
SUNSTONE的Delphi笔记
S
顶部