Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Problem in use Of ReaderWriterLockSlim Class

Problem in use Of ReaderWriterLockSlim Class

Scheduled Pinned Locked Moved C#
helpannouncementlounge
4 Posts 4 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    shahramkeyboard
    wrote on last edited by
    #1

    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();
                    }
    
    H W P 3 Replies Last reply
    0
    • S shahramkeyboard

      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();
                      }
      
      H Offline
      H Offline
      Henry Minute
      wrote on last edited by
      #2

      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.

      1 Reply Last reply
      0
      • S shahramkeyboard

        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();
                        }
        
        W Offline
        W Offline
        William Winner
        wrote on last edited by
        #3

        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.

        1 Reply Last reply
        0
        • S shahramkeyboard

          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();
                          }
          
          P Offline
          P Offline
          Pete OHanlon
          wrote on last edited by
          #4

          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.

          My blog | My articles | MoXAML PowerToys | Onyx

          1 Reply Last reply
          0
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Don't have an account? Register

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • World
          • Users
          • Groups