Path: csiph.com!usenet.pasdenom.info!aioe.org!.POSTED!not-for-mail From: Luca Risolia Newsgroups: comp.lang.c++,comp.programming.threads Subject: Re: Why is java consumer/producer so much faster than C++ Date: Tue, 24 Jul 2012 00:33:10 +0200 Organization: Aioe.org NNTP Server Lines: 17 Message-ID: References: NNTP-Posting-Host: Z2aAaWHo3goDty2MP7NWgA.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: csiph.com comp.lang.c++:17211 comp.programming.threads:971 On 23/07/2012 12:17, Melzzzzz wrote: >> (On a side note, the C++ version you have given does not have the >> best possible interface for a thread-safe queue) > > I have just copied Java BlockingQueue interface, which is of course > suited for Java. Don't know actually how ideal interface would look > like. In C++11 the ideal interface for a generic thread-safe and exception-safe queue should at least provide std::shared_ptr take() and/or void take(T&). T take() is limited to those types having no-throw copy constructors or move-constructors. This also means that you should check the type at compile-time by using type traits. However, in your test case you used move-semantic everywhere, so that is not problem. Also note that the term "pop" instead of "take" is more in the spirit of C++.