
C/C++
Related Reading
More Insights
White Papers
- Protecting Critical Infrastructure: The 2021 Energy, Utilities, and Industrials Cyber Threat Landscape Report
- Business Buyers Guide to Password Managers
Reports
More >>Webcasts
More >>
Currently we allow the following HTML tags in comments:
Single tags
These tags can be used alone and don't need an ending tag.
<br>
Defines a single line break
<hr>
Defines a horizontal line
Matching tags
These require an ending tag - e.g. <i>italic text</i>
<a>
Defines an anchor
<b>
Defines bold text
<big>
Defines big text
<blockquote>
Defines a long quotation
<caption>
Defines a table caption
<cite>
Defines a citation
<code>
Defines computer code text
<em>
Defines emphasized text
<fieldset>
Defines a border around elements in a form
<h1>
This is heading 1
<h2>
This is heading 2
<h3>
This is heading 3
<h4>
This is heading 4
<h5>
This is heading 5
<h6>
This is heading 6
<i>
Defines italic text
<p>
Defines a paragraph
<pre>
Defines preformatted text
<q>
Defines a short quotation
<samp>
Defines sample computer code text
<small>
Defines small text
<span>
Defines a section in a document
<s>
Defines strikethrough text
<strike>
Defines strikethrough text
<strong>
Defines strong text
<sub>
Defines subscripted text
<sup>
Defines superscripted text
<u>
Defines underlined text
Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.
![]() |
To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy. |
Microsoft Visual C++ 11 is available to all licensees of recent versions of Microsoft Windows for free.
As others felt, it would be more appropriate to make the backlog data structure read-only. The threads should only read the data 'designated' to them, not touching the others - opening the scaleout possibilities.
One good way of doing it is, instead of 'dequeue', using some 'indexable' data-structure, such as vector or map for the backlog.
Then each thread will operate only on data related to it. For example, for N threads, thread1 will read all (x%N==0) indices, thread2 will read all (x%N==1) indices, thread3 will read all (x%N==2) indices etc... this way no two threads can access same data.
My personal favorite would be Mapped vector datastructure for the backlog - index the strings with their 1st char in the map and create 26/52 threads (as many as the number of items in the map) and let each thread operate on each set of strings for that char. (If the map is sparse, this may be inefficient). Ofcourse both these two techniques can be combined (since map uses vector or similar indexable datastructure to store its set of strings anyway)
Mark,
I agree that your course is a good introduction to C++11 threads. However your WordSearch.cpp program is about as confusing as it gets for beginners.
It makes no sense to change the backlog deque. Using a vector to return the results and making the original deque a read-only vector is definitely the way to go. And it will be much faster when the number of threads increases.
I am afraid your students will be misinformed on what threading is all about after seeing examples like this one. I side Bjarne on this one: WordSearch.cpp is definitely an antipattern.
Threads should operate on different parts (ranges) of immutable input. There is absolutely no reason for threads to mutate input deque. No mutation = no race conditions = no need for locks.