使用单个信号量C#进行读/写/修改

时间:2014-12-06 12:58:17

标签: c# multithreading semaphore

我有三个线程进入三种不同的方法,在一个字符串上做不同的工作。

第一个写入stringarray。 第二个修改了符合某个条件时写入的字符串。 第三个读取已编写并可能已修改的字符串。

重点是弄清楚如何使用单个信号量。问题是我无法弄清楚如何在一个信号量上同步三个线程。在我看来,它看起来像这样:

Semaphore sem = new Semaphore(0, 1);

string[] stringArray = new string[20];

string replaceString = "Foo";

public string MethodRead(int index)
{
sem.WaitOne();
string temp = strArr[index];
sem.Release();
return temp;
}

public void MethodWrite(string stringToWrite, int index)
{
sem.WaitOne();
stringArray[index] = stringToWrite;
sem.Release();
}

public void MethodModify(int index)
{
sem.WaitOne();
if(stringArray[index] == replaceString)
stringArray[index] = "Bar";
sem.Release();
}

我从每个单独的线程循环这些方法20次。问题是这没有任何意义,因为信号量没有订单。我尝试过使用布尔值和状态枚举,但没有运气。有人得到任何指导吗?

0 个答案:

没有答案