我有一个执行我的函数的类,但是变量变化太快,以至于我什至无法追加文件。我需要速度,但是我需要多线程中的功能。这就是我的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。有什么方法可以使全局变量不会很快改变呢?我需要这样的速度。
答案 0 :(得分:-1)
我不知道它是否有助于或杀死我们的多线程思想,但是您是否曾经考虑过互斥锁? https://www.c-sharpcorner.com/UploadFile/1d42da/threading-with-mutex/