首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

多线程同步有关问题(小有关问题)

2011-12-23 
多线程同步问题(小问题)C# codeprivate int i 0private object SycObjectnew object()private void T

多线程同步问题(小问题)

C# code
   private int i = 0;   private object SycObject=new object();    private void ThreadTest()   {    lock (this)     {        i++;     }   }   private void TreadTestII()   {      lock (SycObject)      {          i++;      }  }

上面的两种方式有什么区别ThreadTest和TreadTestII
最近做事没劲,提个问题,打打气

[解决办法]
1.lock ThreadTest()
2.lock (object)SycObject
[解决办法]
lock (this)
{
i++;
}
把this 放到Monitor里..当没有线程Monitor 这个实例的时候 执行代码 否则等待其他线程Exit后再执行代码.


你的两个方法...说实话 ThreadTest() TreadTestII() 开始运行 谁都不会等待..

Monitor里有个this 和SycObject 谁都不影响谁






[解决办法]
1 lock(this);把整个对象实例都看作是同步的,作为一个同步对象来用(这个类外面的多线程在访问这个对象时,你在这里必须等待访问完后才能访问
2 lock(syncojbect);类内的多线程间的互斥,如果有一线程正在lock 此同步对象,其它的线程仍然可以访问this的其它状态;
[解决办法]
和楼主有同样的问题,倾听中。。。。
[解决办法]
没区别,大家个不相干!
[解决办法]
lock (this)不是一个好东西。建议不用。
[解决办法]
C# code
public class C{    public void do_something()    {        lock (this)        {            ...        }    }}C c = new C();lock (c){    new Thread(c.do_something);    //c.do_something要等到解锁后才执行。
[解决办法]
1 lock(this)是锁定这个类的对象实例,,如果外部多线程要访问这个类的对象就要等待lock(this)执行完。

2,lock(syncojbect);只是锁定类内部的代码段,,多线程仍然可以访问该类的其他对象。。

看了上面各位老大的回答,不知道我的理解是对的么。
[解决办法]
学习` UP
[解决办法]
ding...
[解决办法]
ding...
[解决办法]
探讨
1 lock(this)是锁定这个类的对象实例,,如果外部多线程要访问这个类的对象就要等待lock(this)执行完。

2,lock(syncojbect);只是锁定类内部的代码段,,多线程仍然可以访问该类的其他对象。。

看了上面各位老大的回答,不知道我的理解是对的么。

[解决办法]
没区别,照我的理解,this或是syncobject只是都起的互斥锁的作用,防止两个线程同时进入一个代码块。
[解决办法]
学习
[解决办法]
lock将语句块标记为临界区,确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。方法是获取给定对象的互斥锁,执行语句,然后释放该锁。
定义 private 对象来锁定, 或 private static对象变量来保护所有实例所共有的数据。

lock关键字其实就是对Monitor类的Enter()和Exit()方法的封装,并通过try...catch...finally语句块确保在lock语句块结束后执行Monitor.Exit()方法,释放互斥锁。
参考
[解决办法]
如果没有特殊需要,尽量使用lock(syncojbect)
[解决办法]
两种没有区别de说
第一种情况,并不影响访问。
锁并没有以任何方式阻止对对象本身的访问
[解决办法]
探讨
1 lock(this);把整个对象实例都看作是同步的,作为一个同步对象来用(这个类外面的多线程在访问这个对象时,你在这里必须等待访问完后才能访问


2 lock(syncojbect);类内的多线程间的互斥,如果有一线程正在lock 此同步对象,其它的线程仍然可以访问this的其它状态;


[解决办法]
学习中

热点排行