作者scdog (just do it)
看板C_Sharp
标题Re: [问题] C# lock
时间Mon Oct 19 23:35:01 2009
※ 引述《toki (いまがその时だ)》之铭言:
: ※ 引述《JK (525天倒数)》之铭言:
: : 想问一个关於lock关键字的问题
: : lock (object)
: : {
: : }
: : lock的是{}中间包含的程式码或者是object本身?
: : 我遇到的问题是我有两个function
: : 分别对一个object作处理
: : 因为是在不同的thread底下做的
: : 所以在各自程式段都有加上lock
: : 当这两个function被不同thread执行到时
: : 究竟lock还有没有效果呢?
: : 还请版上高手不吝指教,谢谢:)
: lock 物件
: lock (obj)
: {
: // your code
: }
: 等同
: Enter(obj);
: // your code
: Exit(obj);
: 请参照
: http://msdn.microsoft.com/zh-tw/library/c5kehkcz.aspx
: 至於 function 被不同的 thread 执行到,只要你 lock 的物件是同一个,
: 同时间 lock 到相同物件的 thread 一定只有一个通过,而其它的 wait
最近小的遇到一个奇怪的问题
Application.current.begininvoke()
{
lock(locker)
{
// code 1
// code 2
}
}
当不同的thread跑到lock下
的确会让慢进的thread等在外面
可是当code 1是呼叫application的invoke时
如下所示
Application.current.begininvoke()
{
lock(locker)
{
Application.currenr.invoke()
{
// code 1
}
// code 2
}
}
此时同时间却会好几个thread进入lock
不知道为何会如此?
是这样的写法造成ui thread混乱?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.171.3.25