C#多个线程共用同1个变量

wenchaoxin 2016-09-14 11:29:25
大家好,我刚刚接触C#,以前对VC++有所了解,我想在2个工作线程中用同一个变量,以前C++就直接声明全局变量就行,但C#好像不行
如:

public static int testvar1;//在主线程中声明的变量1
public static int testvar2;//在主线程中声明的变量2
testvar2=10;
public class A //A工作线程
{
testvar1=100;
}
public class B //B工作线程
{
if(testvar2==300)
testvar1=200;
}
各位师兄师姐们给指点下
...全文
3858 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
“在主线程中声明的变量1”这个说法是错误的,即使在 c++ 中也一样的错误的。 线程跟声明变量没有关系。变量声明是静态的,在类、方法、属性等等地方声明它,声明的时候跟线程毫无关系。怎么会有“在线程中声明”的说法呢?有虚妄的说法,你自然就多出许多事儿来。 声明一个全局变量,然后在方法中访问,没有任何问题。 如果多个线程所执行的方法代码并发地访问了这个变量,实际上也没有技术问题。如果有问题就在于逻辑,也就是用“验收测试”来说明的问题。并不是说天生就必须互斥线程访问此变量的代码部分,而是仅仅当业务逻辑产生冲突、数据结果不可靠时才应该使用 lock,并不是必须使用 lock。 最后,回到你的问题,你从c#基本语法上就有严重问题。为变量单独赋值的语句必须放到方法中。
Poopaye 2016-09-14
  • 打赏
  • 举报
回复
楼主你c++里的线程难道用的也是class?
xian_wwq 2016-09-14
  • 打赏
  • 举报
回复
引用 楼主 wenchaoxin 的回复:
大家好,我刚刚接触C#,以前对VC++有所了解,我想在2个工作线程中用同一个变量,以前C++就直接声明全局变量就行,但C#好像不行 如: public static int testvar1;//在主线程中声明的变量1 public static int testvar2;//在主线程中声明的变量2 testvar2=10; public class A //A工作线程 { testvar1=100; } public class B //B工作线程 { if(testvar2==300) testvar1=200; } 各位师兄师姐们给指点下
全局变量就可以,不需要static 话说多线程访处理同一个变量,不加锁就不怕脏数据? 参考InterLocked类
花开花折 2016-09-14
  • 打赏
  • 举报
回复
这样是可以的,但你得给这个变量加锁 Lock();
Forty2 2016-09-14
  • 打赏
  • 举报
回复
class My
{
    int testvar1;      //声明的变量1
    int testvar2 = 10; //声明的变量2
        
    public void A(object state)    //A工作线程
    {
        testvar1=100;
    }

    // 示例代码,不安全不可照抄
    public void B(object state)    //B工作线程
    {
        if(testvar2==300)
            testvar1=200;
    }
}
wenchaoxin 2016-09-14
  • 打赏
  • 举报
回复
A mt = new A(); ThreadStart threadStart = new ThreadStart(mt.Calculate); thread = new Thread(threadStart);//Thread thread.Start(); 是这样启动线程A的,1楼的方法好像不行

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧