private int i;
public void test()
{
i+=100;
}
public void test()
{
i+=100;
}
解决方案 »
- 我很想知道这个问题是错在哪里了? 请高手指点,谢谢
- c#中如何编写一个保存当前文件的方法?(区别于另存为)
- 用什么类型来接收sql server返回的datetime值?
- fastreport小数显示问题
- 急 IMAGE控件加载图形后,如何获取和判断控件的大小,或者说如何判断图片的大小
- 菜鸟, C# 读TXT 的小问题
- 在aspx引用的ascx文件里,JAVA语句document.all.HiddenValue1.value,或者document.getElementById('HiddenValue1).value怎么都出现错误?
- **关于C#控件制作的问题**
- datagridview如何显示合计
- 如何做一个同PHOTOSHOP布局的窗体呢??
- 数据转换问题
- 请问如何打印表格式(Detial)的ListView(包括每个字段名).up有分。
线程安全
此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。希望哪个高手给解释一下?
线程安全
此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。希望哪个高手给解释一下?
如:
class Test
{
static void Main()
{
Test objTest=new Test();
Thread newThread=new Thread(new ThreadStart(objTest.threadToRun));
newThread.Start();
tbjTest.threadToRun();
}
void threadToRun()
{
lock(this)
for(int i=0;i<100;i++)
{
Console.WriteLine("线程数为:{0}",i)
}
}}
还是只锁定threadToRun方法
还是只锁定threadToRun方法
比如很简单的一个公共方法:
void aMethod()
{
FieldOne = aStaticField;
aStaticField++;
FieldTwo = aStaticField;
}
直观上感觉,运行后 FieldTwo == FieldOne + 1 。
但如果你在两个线程中调用,两个线程的执行顺序是不一定的,那样就会出现非期望的结果。
比如两个线程以下面这样的顺序执行:
FieldOne = aStaticField; // 线程1
FieldOne = aStaticField; // 线程2
aStaticField++; // 线程1
aStaticField++; // 线程2
FieldTwo = aStaticField; // 线程1
FieldTwo = aStaticField; // 线程2
这样 FieldTwo == FieldOne + 2 ,这不是我们想要的。
当然这样的情况在我们单CPU的机器上也许永远都不会发生,但它的确存在,尤其是多CPU的机器上。
要处理这样的问题,就像楼上们说的,加锁就行了。这方面的知识在操作系统教材和多线程的书上都会有讲,是线程同步的问题。
能具体说一下吗?