std::list::insert 线程安全
std::list::insert thread safety
假设我能做的所有操作是:
- 正在将新元素插入 std::list(或)
- 读取列表的 back() 元素
我线程安全吗?任何线程都可以按任何顺序执行这两个操作中的任何一个。我不希望看到任何特定的顺序,例如,如果我插入一个元素然后读取 back() 我不希望它是我刚刚插入的最后一个,我只需要返回的元素应该是有效一个。
我可以在不引入未定义行为的情况下安全地执行此操作吗?
我也知道我可能需要使用并发队列,这也是我可能会考虑的一个选项,但这次我只是对这个带有 std::list.
的特定情况感到好奇
Am I thread safe?
可能是;不一定。
插入元素的位置至关重要。如果你插入到列表的后面,那么你有一个数据竞争,因此有 UB。如果您在末尾以外的其他地方插入(因此列表在插入之前必须是非空的),那么它应该是线程安全的。
假设我能做的所有操作是:
- 正在将新元素插入 std::list(或)
- 读取列表的 back() 元素
我线程安全吗?任何线程都可以按任何顺序执行这两个操作中的任何一个。我不希望看到任何特定的顺序,例如,如果我插入一个元素然后读取 back() 我不希望它是我刚刚插入的最后一个,我只需要返回的元素应该是有效一个。
我可以在不引入未定义行为的情况下安全地执行此操作吗? 我也知道我可能需要使用并发队列,这也是我可能会考虑的一个选项,但这次我只是对这个带有 std::list.
的特定情况感到好奇Am I thread safe?
可能是;不一定。
插入元素的位置至关重要。如果你插入到列表的后面,那么你有一个数据竞争,因此有 UB。如果您在末尾以外的其他地方插入(因此列表在插入之前必须是非空的),那么它应该是线程安全的。