non*_*ame 4 c++ queue multithreading thread-safety
我想知道这种情况是否(线程)安全.
有一个线程只推送到std :: queue.
还有另一个线程只从std :: queue弹出.
由于队列是否为空,是线程安全管理,后一个线程不会弹出失败.
请问你能帮帮我吗?
谢谢.
我相信答案是否定的.
标准说(§23.2.2/ 1):
为避免数据争用(17.6.5.9),实现应将以下函数视为const:begin,end,rbegin,rend,front,back,data,find,lower_bound,upper_bound,equal_range,at和,除了关联或无序的关联容器,operator [].
至少当我解释事物(和Herb Sutter似乎同意)时,这意味着那些函数(并且只有那些函数)可以被视为"线程安全".推送和弹出不在列表中,因此您不能认为它们是线程安全的.
我还要补充一点,即使弹出也会实际写入数据 - 当你从容器中弹出一个项目时,需要更新容器的大小,因此推送和弹出都会写入.当多个线程写入时,您需要做一些事情以确保一次只有一个线程执行.
总结一下:抱歉,但没有.