I have a producer/consumer situation with single producer and single consumer, sharing a common std::deque.
Let me write some code:
deque<int> dq;
void producer()
{
for (int i = 0; i < N; i++)
   dq.push_back(i);
   // signal data
}
void consumer()
{
  // get signal
  int n = dq.front();
  dq.pop_front();
}
Consider consumer() and producer() being executed on independent threads. Does this code need synchronization?