STL 中的 queue 是非線程安全的,一個組合操作:front(); pop() 先讀取隊首元素然后刪除隊首元素,若是有多個線程執行這個組合操作的話,可能會發生執行序列交替執行,導致一些意想不到的行為。因此需要重新設計線程安全的 queue 的接口。
實際測試:
實測場景: 1個線程數據入隊,4個線程競爭出隊。
實際結果:隊列已為空,但由于STL queue 屬于非線程安全接口,導致無同步機制保障,多個線程同時訪問同一數據。實際執行出隊線程,并未同步已出隊的數據至其他出隊線程,導致隊列為空,依舊訪問。致使線程崩潰,進程崩潰。