Problem in use Of ReaderWriterLockSlim Class
-
hi my code is:
static ReaderWriterLockSlim rw = new ReaderWriterLockSlim(); static Random rand = new Random(); Thread\[\] AThreadReader, AThreadWriter; Thread ThreadReaderCreator; string sDataBase; Boolean bWriterMustAlive; string\[\] asReaderDataBase = new string\[10\];
private void btnRun_Click(object sender, EventArgs e)
{
AThreadWriter = new Thread[Int16.Parse(txtBNMWriters.Text)];
bWriterMustAlive = true;
for (int i = 0; i < Int16.Parse(txtBNMWriters.Text); i++)
{
AThreadWriter[i] = new Thread(fThreadWriter);
AThreadWriter[i].Name = i.ToString();
AThreadWriter[i].IsBackground = true;
AThreadWriter[i].Start();
}
ThreadReaderCreator = new Thread(fThreadCreator);
ThreadReaderCreator.IsBackground = true;
ThreadReaderCreator.Start();
}void fThreadCreator() { Random r = new Random(); AThreadReader = new Thread\[Int16.Parse(txtBNMReaders.Text)\]; for (int i = 0; i < Int16.Parse(txtBNMReaders.Text); i++) { int IloopLength = Int16.Parse(txtBLowerBCReaders.Text) + r.Next(Int16.Parse(txtBUpperBCReaders.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int j = 0; j < IloopLength; j++) ; AThreadReader\[i\] = new Thread(fThreadReader); AThreadReader\[i\].Name = i.ToString(); AThreadReader\[i\].IsBackground = true; AThreadReader\[i\].Start(); } } void fThreadWriter() { Random r = new Random(); int ID = Int16.Parse(Thread.CurrentThread.Name); int news = ID; while (bWriterMustAlive) { int IloopLength = Int16.Parse(txtBLowerBCWriters.Text) + r.Next(Int16.Parse(txtBUpperBCWriters.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int i = 0; i < IloopLength; i++) ; sDataBase = ""; for (int i = 0; i < Int16.Parse(txtBNumbersInString.Text); i++) { while (true) { rw.EnterWriteLock(); sDataBase += news.ToString() + " "; rw.ExitWriteLock(); }
-
hi my code is:
static ReaderWriterLockSlim rw = new ReaderWriterLockSlim(); static Random rand = new Random(); Thread\[\] AThreadReader, AThreadWriter; Thread ThreadReaderCreator; string sDataBase; Boolean bWriterMustAlive; string\[\] asReaderDataBase = new string\[10\];
private void btnRun_Click(object sender, EventArgs e)
{
AThreadWriter = new Thread[Int16.Parse(txtBNMWriters.Text)];
bWriterMustAlive = true;
for (int i = 0; i < Int16.Parse(txtBNMWriters.Text); i++)
{
AThreadWriter[i] = new Thread(fThreadWriter);
AThreadWriter[i].Name = i.ToString();
AThreadWriter[i].IsBackground = true;
AThreadWriter[i].Start();
}
ThreadReaderCreator = new Thread(fThreadCreator);
ThreadReaderCreator.IsBackground = true;
ThreadReaderCreator.Start();
}void fThreadCreator() { Random r = new Random(); AThreadReader = new Thread\[Int16.Parse(txtBNMReaders.Text)\]; for (int i = 0; i < Int16.Parse(txtBNMReaders.Text); i++) { int IloopLength = Int16.Parse(txtBLowerBCReaders.Text) + r.Next(Int16.Parse(txtBUpperBCReaders.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int j = 0; j < IloopLength; j++) ; AThreadReader\[i\] = new Thread(fThreadReader); AThreadReader\[i\].Name = i.ToString(); AThreadReader\[i\].IsBackground = true; AThreadReader\[i\].Start(); } } void fThreadWriter() { Random r = new Random(); int ID = Int16.Parse(Thread.CurrentThread.Name); int news = ID; while (bWriterMustAlive) { int IloopLength = Int16.Parse(txtBLowerBCWriters.Text) + r.Next(Int16.Parse(txtBUpperBCWriters.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int i = 0; i < IloopLength; i++) ; sDataBase = ""; for (int i = 0; i < Int16.Parse(txtBNumbersInString.Text); i++) { while (true) { rw.EnterWriteLock(); sDataBase += news.ToString() + " "; rw.ExitWriteLock(); }
shahramkeyboard wrote:
but I can,t Slove Readers Writers Problem
What readers writers problem? There is a lot of code there, it would help if you, at least, gave some sort of clue as to where the code is failing. Are there any compiler error messages? Any run-time Exceptions? Are you getting different results than you expect, if so how are they different?
Henry Minute Do not read medical books! You could die of a misprint. - Mark Twain Girl: (staring) "Why do you need an icy cucumber?" “I want to report a fraud. The government is lying to us all.” Why do programmers often confuse Halloween and Christmas? Because 31 Oct = 25 Dec.
-
hi my code is:
static ReaderWriterLockSlim rw = new ReaderWriterLockSlim(); static Random rand = new Random(); Thread\[\] AThreadReader, AThreadWriter; Thread ThreadReaderCreator; string sDataBase; Boolean bWriterMustAlive; string\[\] asReaderDataBase = new string\[10\];
private void btnRun_Click(object sender, EventArgs e)
{
AThreadWriter = new Thread[Int16.Parse(txtBNMWriters.Text)];
bWriterMustAlive = true;
for (int i = 0; i < Int16.Parse(txtBNMWriters.Text); i++)
{
AThreadWriter[i] = new Thread(fThreadWriter);
AThreadWriter[i].Name = i.ToString();
AThreadWriter[i].IsBackground = true;
AThreadWriter[i].Start();
}
ThreadReaderCreator = new Thread(fThreadCreator);
ThreadReaderCreator.IsBackground = true;
ThreadReaderCreator.Start();
}void fThreadCreator() { Random r = new Random(); AThreadReader = new Thread\[Int16.Parse(txtBNMReaders.Text)\]; for (int i = 0; i < Int16.Parse(txtBNMReaders.Text); i++) { int IloopLength = Int16.Parse(txtBLowerBCReaders.Text) + r.Next(Int16.Parse(txtBUpperBCReaders.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int j = 0; j < IloopLength; j++) ; AThreadReader\[i\] = new Thread(fThreadReader); AThreadReader\[i\].Name = i.ToString(); AThreadReader\[i\].IsBackground = true; AThreadReader\[i\].Start(); } } void fThreadWriter() { Random r = new Random(); int ID = Int16.Parse(Thread.CurrentThread.Name); int news = ID; while (bWriterMustAlive) { int IloopLength = Int16.Parse(txtBLowerBCWriters.Text) + r.Next(Int16.Parse(txtBUpperBCWriters.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int i = 0; i < IloopLength; i++) ; sDataBase = ""; for (int i = 0; i < Int16.Parse(txtBNumbersInString.Text); i++) { while (true) { rw.EnterWriteLock(); sDataBase += news.ToString() + " "; rw.ExitWriteLock(); }
shahramkeyboard wrote:
what is the Prblem?
Seriously...what is the problem? We have no clue unless you tell us exactly how it isn't working. And why, in god's name, would you ever write
while (true)
Did you just want an infinite loop in your code? AFAIK, rw.EnterWriteLock will not throw an error in your case, so you will never get out of that while loop.
-
hi my code is:
static ReaderWriterLockSlim rw = new ReaderWriterLockSlim(); static Random rand = new Random(); Thread\[\] AThreadReader, AThreadWriter; Thread ThreadReaderCreator; string sDataBase; Boolean bWriterMustAlive; string\[\] asReaderDataBase = new string\[10\];
private void btnRun_Click(object sender, EventArgs e)
{
AThreadWriter = new Thread[Int16.Parse(txtBNMWriters.Text)];
bWriterMustAlive = true;
for (int i = 0; i < Int16.Parse(txtBNMWriters.Text); i++)
{
AThreadWriter[i] = new Thread(fThreadWriter);
AThreadWriter[i].Name = i.ToString();
AThreadWriter[i].IsBackground = true;
AThreadWriter[i].Start();
}
ThreadReaderCreator = new Thread(fThreadCreator);
ThreadReaderCreator.IsBackground = true;
ThreadReaderCreator.Start();
}void fThreadCreator() { Random r = new Random(); AThreadReader = new Thread\[Int16.Parse(txtBNMReaders.Text)\]; for (int i = 0; i < Int16.Parse(txtBNMReaders.Text); i++) { int IloopLength = Int16.Parse(txtBLowerBCReaders.Text) + r.Next(Int16.Parse(txtBUpperBCReaders.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int j = 0; j < IloopLength; j++) ; AThreadReader\[i\] = new Thread(fThreadReader); AThreadReader\[i\].Name = i.ToString(); AThreadReader\[i\].IsBackground = true; AThreadReader\[i\].Start(); } } void fThreadWriter() { Random r = new Random(); int ID = Int16.Parse(Thread.CurrentThread.Name); int news = ID; while (bWriterMustAlive) { int IloopLength = Int16.Parse(txtBLowerBCWriters.Text) + r.Next(Int16.Parse(txtBUpperBCWriters.Text) - Int16.Parse(txtBLowerBCReaders.Text)); for (int i = 0; i < IloopLength; i++) ; sDataBase = ""; for (int i = 0; i < Int16.Parse(txtBNumbersInString.Text); i++) { while (true) { rw.EnterWriteLock(); sDataBase += news.ToString() + " "; rw.ExitWriteLock(); }
You've posted too much code without any explanation as to what type of problem you are encountering is. I will point out, though, that you make way too much use of
Int16.Parse(txtBNMReaders.Text)
. First of all, Don't Repeat Yourself (this is known as the DRY principle); parse it once and make use of the parsed value. Secondly, what happens if txtBNMReaders.Text says A1? Always prefer to use.TryParse
over .Parse
."WPF has many lovers. It's a veritable porn star!" - Josh Smith
As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.