解决方案 »
- asp.net2.0开发的管理软件发布,要注意什么?
- 如何将2007:11:10 12:11:11转换成2007-11-10 12:11:11
- 报表添加数据库问题?
- 请问ComboBox下拉框控件如何使编辑框部分不可编辑
- 如何把一个大数组拷贝到一个小数组,急救~!
- gridview detailsview 主从表问题
- 有关DateTime
- Visual Studio .NET 2003中添加Windos窗体时没有模板
- 如何在程序中(C#)中实现对IIS中某文件的创建和读写
- 急!关于连接 Microsoft Access 数据库后出现的一系列问题!!!
- 在窗体中,怎样设置picture控件的背景成为透明,或者怎样自定义它的外形
- c#开发类似于公式编辑器的东西一般有哪些方法?
你两个界面调一个类,直接类里面lock本类的静态对象obj1就可以了.
while(true){//这里假设很多,用true表示
A a=new A();
a.Foo();
}
那么这段代码调用Foo里面就完全没有起到同步的作用啊.反而我觉得应该是要lock静态变量,主要是看什么个用法.当然如果临界资源不会超本类,那么lock非静态变量是正常的.
因为编译器是允许你同时有多对锁的,所以才需要你传递一个锁定的对象作为标识啊比如下面的例子:
fun1()
{
lock(a){}
}
fun2()
{
lock(a){}
}
fun3(){lock(b){}}
fun4(){lock(b){}}
那么1和2互斥,3和4互斥,1和3可以同时执行
那么如果你在类里做lock,要么被lock的对象是在类外面定义的一个公共变量,要么是在类里定义的静态变量
否则每实例化一次,类里的变量都多一个实例出来,各自锁定不同的实例,编译器哪知道你是想各个实例之间互斥啊