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 631763
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T20:00:09+00:00 2026-05-13T20:00:09+00:00

What is the difference in using the blocking call pop() as compared to, while(pop_if_present(…))

  • 0

What is the difference in using the blocking call pop() as compared to,

while(pop_if_present(...)) 

Which should be preferred over the other? And why?

I am looking for a deeper understanding of the tradeoff between polling yourself as in the case of while(pop_if_present(...)) with respect to letting the system doing it for you. This is quite a general theme. For example, with boost::asio I could do a myIO.run() which blocks or do the following:

while(1) 
{
myIO.poll()
}

One possible explanation is is that the thread that invokes while(pop_if_present(...)) will remain busy so this is bad. But someone or something has to poll for the async event. Why and how can this be cheaper when it is delegated to the OS or the library? Is it because the OS or the library smart about polling for example do an exponential backoff?

  • 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-13T20:00:10+00:00Added an answer on May 13, 2026 at 8:00 pm

    Intel’s TBB library is open source, so I took a look…

    It looks like pop_if_present() essentially checks if the queue is empty and returns immediately if it is. If not, it attempts to get the element on the top of the queue (which might fail, since another thread may have come along and taken it). If it misses, it performs an “atomic_backoff” pause before checking again. The atomic_backoff will simply spin the first few times it’s called (doubling its spin loop count each time), but after a certain number of pauses it’ll just yield to the OS scheduler instead of spinning on the assumption that since it’s been waiting a while, it might as well do it nicely.

    For the plain pop() function, if there isn’t anything in the queue will perform atomic_backoff waits until there is something in the queue that it gets.

    Note that there are at least 2 interesting things (to me anyway) about this:

    • the pop() function performs spin waits (up to a point) for something to show up in the queue; it’s not going to yield to the OS unless it has to wait for more than a little short moment. So as you might expect, there’s not much reason to spin yourself calling pop_if_present() unless you have something else you’re going to do between calls to pop_if_present()

    • when pop() does yield to the OS, it does so by simply giving up it’s time slice. It doesn’t block the thread on a synchronization object that can be signaled when an item is placed on the queue – it seems to go into a sleep/poll cycle to check the queue for something to pop. This surprised me a little.

    Take this analysis with a grain of salt… The source I used for this analysis might be a bit old (it’s actually from concurrent_queue_v2.h and .cpp) because the more recent concurrent_queue has a different API – there’s no pop() or pop_if_present(), just a try_pop() function in the latest class concurrent_queue interface. The old interface has been moved (possibly changed somewhat) to the concurrent_bounded_queue class. It appears that the newer concurrent_queues can be configured when the library is built to use OS synchronization objects instead of busy waits and polling.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 452k
  • Answers 452k
  • 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 It is doable. Just set the maximum size for the… May 15, 2026 at 9:13 pm
  • Editorial Team
    Editorial Team added an answer There's a commercial environment which allows to develop iPhone applications… May 15, 2026 at 9:13 pm
  • Editorial Team
    Editorial Team added an answer This stylesheet: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/>… May 15, 2026 at 9:13 pm

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.