小编i_s*_*tos的帖子

如何在无限循环中使用线程锁?

我对一般的线程很新,我想在C#中尝试它.我试图对每秒钟衰减并且每10秒重新填充一次的吨位进行基本模拟.从我读到的,线程安全是我需要考虑的事情,因为有两个线程; 一个用于将变量吨位减少160,一个用于向吨位添加随机量,并且由于它们正在对变量吨位进行交易,我应该确保它们被正确访问.

我读了如何使用锁(对象),我理解简单的线程示例的概念,但我如何使用它永远运行的2个线程,并且必须及时调整吨位?

这就是我所拥有的,但当我锁定整个循环时,另一个线程永远不会产生.或者我有错误的代码结构?

public double tonnage = 1000;
private object x = new object(); 

//Starts the simulation, runs forever until user ends the simulation
private void btnStart_Click(object sender, EventArgs e)
{
    //Decay Tonnage
    Thread decayTonnageThread = new Thread(() => decayTonnage (tonnage));
    decayTonnageThread .Start();

    //Add Tonnage
    Thread addTonnageThread = new Thread(() => addTonnage (tonnage));
    addTonnageThread .Start();
}

//I want to decay the tonnage every 20 seconds
public void decayTonnage (double tonnage)
    {
        lock(x)
        {
            while (true) …
Run Code Online (Sandbox Code Playgroud)

c# multithreading thread-safety

2
推荐指数
1
解决办法
632
查看次数

标签 统计

c# ×1

multithreading ×1

thread-safety ×1