C#中的多线程,但是变量更改太快

时间:2018-07-29 22:11:00

标签: c# multithreading

我有一个执行我的函数的类,但是变量变化太快,以至于我什至无法追加文件。我需要速度,但是我需要多线程中的功能。这就是我的program.cs中的内容,它实际上是多线程中的主要键。

        process process = new process();
        Thread[] threads = new Thread[15];
        static int refInt = 0;
        for (int i = 0; i < threads.Count(); i++)
        {
            threads[i] = new Thread(process.checkCookies);
        }

        foreach (Thread threadStart in threads)
        {
            threadStart.Start();
        }

那是我的program.cs,这是我的进程库。

    public void checkCookies()
    {
        try
        {
            while (Interlocked.Increment(ref refInt) < cookies.Count)
            {
                try
                {
                    string data = functions.cookieToUserId(cookies[refInt]);
                    if (data == "The cookie is incorrect.")
                    {
                        ConsoleWrite("\nThe cookie is invalid.", ConsoleColor.DarkRed);
                        continue;
                    }
                    string cookiesValue = functions.getRobux(cookies[refInt]);
                    if (cookiesValue == "Invalid cookie.")
                    {
                        ConsoleWrite("\nThe cookie is invalid.", ConsoleColor.DarkRed);
                        continue;
                    }
                    else if (Convert.ToInt32(cookiesValue) < 5)
                    {
                        ConsoleWrite(string.Format("\nThe account has less than 5 currency. [{0}]", data), ConsoleColor.DarkRed);
                        continue;
                    }
                    else if (Convert.ToInt32(cookiesValue) > 5)
                    {
                        ConsoleWrite(string.Format("\nThe account has {0} currency. [{1}]", cookiesValue, data), ConsoleColor.DarkGreen);
                        functions.appendFile("config/checkedCookies.txt", cookies[refInt]);
                        continue;
                    }
                }
                catch
                {
                    //exception
                }
            }
        }
        catch
        {
            //exception
        }
    }

我的问题是,只要有一个cookie,且它的货币整数大于5,它就会添加appendFile,这基本上是这里的函数。

    public string appendFile(string file, string content)
    {
        try
        {
            using (StreamWriter writeStream = File.AppendText(file))
            {
                writeStream.WriteLine(content);
                return "Appended the text successfully!";
            }
        }
        catch (Exception)
        {
            return "Error appending the text.";
        }
    }

由于另一个线程正在运行refInt,因此它发生了变化。因此,如果refInt等于4,则在经过所有其他if语句之后。由于其他线程运行代码并更改全局变量,因此refInt更改为20-25,因此每当我添加文本时,它都会添加错误的cookie。有什么方法可以使全局变量不会很快改变呢?我需要这样的速度。

1 个答案:

答案 0 :(得分:-1)

我不知道它是否有助于或杀死我们的多线程思想,但是您是否曾经考虑过互斥锁? https://www.c-sharpcorner.com/UploadFile/1d42da/threading-with-mutex/