我有球之類的物體。這些物件是動態創建的并堆疊成一個向量。對于這些球中的每一個,都會創建一個單獨的流來更新其坐標。這些流中的每一個都有一個對帶有球的向量的參考,并且知道其球的序列號。然后,假設我需要洗掉幾個與它們關聯的球和流。
我是這樣做的:劍有一個bool killMe變數,當需要移除球時,該變數會變為真。更新坐標的執行緒注意到需要移除球,移除球并自行終止。但是當球從向量中移除時,后續球的序列號發生變化,并且它們的流在下次嘗試參考它們時會導致程式崩潰。
如何組織及時更新他們的資料流中的球索引?
uj5u.com熱心網友回復:
與其每個執行緒都有一個指向向量的索引,為什么不傳遞對正在處理的物件的參考呢?
請注意,如果您的向量是vector<Ball>,這可能仍然有問題,因為我不確定對移動物件的參考會發生什么。這聽起來是個問題。
但是你可以存盤vector<std::shared_ptr<Ball>>,然后你就是金子。
如果你真的想使用索引,另一個選擇仍然是使用共享指標的向量,但是你可以取消你需要洗掉的指標——在你的向量中留下漏洞,但至少你不會移動東西。
另一種選擇涉及互斥鎖,您將被互斥鎖鎖定很多。這似乎不太有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/359310.html
