Invalidating iterators c
The , and at least one of the threads may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.The mutual exclusion between the threads can be achieved by wrapping operations of the underlying - the old element is being overwritten by the new one.There was a discussion what exactly "overwriting of an element" means during the formal review.It may be either a destruction of the original element and a consequent inplace construction of a new element or it may be an assignment of a new element into an old one.In case an invalid iterator is used the assertion will report an error.
There are several options how to cope with the case if a data source produces more data than can fit in the fixed-sized buffer: was designed and optimized to be circular (which means overwriting the oldest data when full).
If such a controlling mechanism had been enabled, it would just complicate the matters and the usage of the would be probably less straightforward.
Moreover, the first two options (and the fourth option as well) do not require the buffer to be circular at all.
The bounded buffer is normally used in a producer-consumer mode when producer threads produce items and store them in the container and consumer threads remove these items and process them.
The bounded buffer has to guarantee that producers do not insert items into the container when the container is full, that consumers do not try to remove items when the container is empty, and that each produced item is consumed by exactly one consumer.
The example below shows how the method is called by the producer thread in order to insert a new item into the buffer.