Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 190699
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T16:16:43+00:00 2026-05-11T16:16:43+00:00

This isn’t about the different methods I could or should be using to utilize

  • 0

This isn’t about the different methods I could or should be using to utilize the queues in the best manner, rather something I have seen happening that makes no sense to me.

void Runner() {
    // member variable
    queue = Queue.Synchronized(new Queue());
    while (true) {
        if (0 < queue.Count) {
            queue.Dequeue();
        }
    }
}

This is run in a single thread:

var t = new Thread(Runner);
t.IsBackground = true;
t.Start();

Other events are “Enqueue”ing else where. What I’ve seen happen is over a period of time, the Dequeue will actually throw InvalidOperationException, queue empty. This should be impossible seeing as how the count guarantees there is something there, and I’m positive that nothing else is “Dequeue”ing.

The question(s):

  1. Is it possible that the Enqueue actually increases the count before the item is fully on the queue (whatever that means…)?
  2. Is it possible that the thread is somehow restarting (expiring, reseting…) at the Dequeue statement, but immediately after it already removed an item?

Edit (clarification):

These code pieces are part of a Wrapper class that implements the background helper thread. The Dequeue here is the only Dequeue, and all Enqueue/Dequeue are on the Synchronized member variable (queue).

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-11T16:16:43+00:00Added an answer on May 11, 2026 at 4:16 pm

    Using Reflector, you can see that no, the count does not get increased until after the item is added.

    As Ben points out, it does seem as you do have multiple people calling dequeue.

    You say you are positive that nothing else is calling dequeue. Is that because you only have the one thread calling dequeue? Is dequeue called anywhere else at all?

    EDIT:

    I wrote a little sample code, but could not get the problem to reproduce. It just kept running and running without any exceptions.

    How long was it running before you got errors? Maybe you can share a bit more of the code.

    class Program
    {
        static Queue q = Queue.Synchronized(new Queue());
        static bool running = true;
    
        static void Main()
        {
            Thread producer1 = new Thread(() =>
                {
                    while (running)
                    {
                        q.Enqueue(Guid.NewGuid());
                        Thread.Sleep(100);
                    }
                });
    
            Thread producer2 = new Thread(() =>
            {
                while (running)
                {
                    q.Enqueue(Guid.NewGuid());
                    Thread.Sleep(25);
                }
            });
    
            Thread consumer = new Thread(() =>
                {
                    while (running)
                    {
                        if (q.Count > 0)
                        {
                            Guid g = (Guid)q.Dequeue();
                            Console.Write(g.ToString() + " ");
                        }
                        else
                        {
                            Console.Write(" . ");
                        }
                        Thread.Sleep(1);
                    }
                });
            consumer.IsBackground = true;
    
            consumer.Start();
            producer1.Start();
            producer2.Start();
    
            Console.ReadLine();
    
            running = false;
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 109k
  • Answers 109k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer MS has an open bug report as of 6/14/09 reguarding… May 11, 2026 at 9:26 pm
  • Editorial Team
    Editorial Team added an answer You may be able to use WWW::Mechanize for this purpose:… May 11, 2026 at 9:26 pm
  • Editorial Team
    Editorial Team added an answer I usually just fill the param part for setters, and… May 11, 2026 at 9:26 pm

Related Questions

This isn't legal: public class MyBaseClass { public MyBaseClass() {} public MyBaseClass(object arg) {}
This isn't a holy war, this isn't a question of which is better. What
This isn't as malicious as it sounds, I want to get the current size
This isn't a question but I thought I'd start a thread where links to
This isn't my code; I am trying to figure out what exactly this does.

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.