Blocking Issues
To make my point clear, you have to use a condition variable in combination with a predicate. If you don’t, your program may become a victim of a spurious wakeup or lost wakeup.
If you use a condition variable without a predicate, the notifying thread may send its notification before the waiting thread is waiting. Therefore, the waiting thread waits forever. This phenomenon is called a lost wakeup.
Here is the program.
1
// conditionVariableBlock.cpp
2
3
#include
<iostream>
4
#include
<condition_variable>
5
#include
<mutex>
6
#include
<thread>
7
8
std
::
mutex
mutex_
;
9
std
::
condition_variable
condVar
;
10
11
bool
dataReady
;
12
13
14
void
waitingForWork
(){
15
16
std
::
cout
<<
"Worker: Waiting for work."
<<
std
::
endl
;
17
18
std
::
unique_lock
<
std
::
mutex
>
lck
(
mutex_
);
19
condVar
.
wait
(
lck
);
20
// do the work
21
std
::
cout
<...