gpt4 book ai didi

每个线程仅使用一个索引的结构线程安全的 C++ 成员数组?

转载 作者:行者123 更新时间:2023-11-28 03:56:18 25 4
gpt4 key购买 nike

结构线程的 C++ 成员数组是否安全,每个线程仅使用一个索引?

使用以下类:

typedef struct {
bool bFlag;
unsigned int uiNum;
} TC_MYSTRUCT;

class MyClass {
public:
MyClass();
~MyClass();
int GetFreeIndex();
void SetIndexDataNum(int idx, int num);
int GetIndexDataNum(int idx);
private:
TC_MYSTRUCT m_arr[10];
};
  • 这个类被定义为一个全局变量。
  • GetFreeIndex() 与临界区同步 ...
  • 有一些线程使用 GetFreeIndex() 从成员数组中获取一个空闲索引
  • SetIndexDataNum 修改它自己在 m_arr 中的唯一条目。
  • 在一个线程中,SetIndexDataNum/GetIndexDataNum 仅使用线程特定索引调用
  • SetIndexDataNum/GetIndexDataNum可以同时调用,但索引不同
  • SetIndexDataNum/GetIndexDataNum 永远不会在线程内同时调用

使用内部没有临界区的方法 SetIndexDataNum/GetIndexDataNum 是否线程安全?(因为它们只寻址特定的数组索引)

最佳答案

如果 GetFreeIndex 被正确同步,并且永远不会返回相同的索引两次,并且给定的索引值从不在线程之间共享,然后调用 SetIndexDataNumGetIndexDataNum 如果它们是简单的数组索引操作,则不需要同步,因为单独的线程正在访问单独的对象。

如果索引值在线程之间共享,那么您肯定需要同步。如果 get/set 函数比简单的数组索引更复杂,那么它们可能无论如何都需要同步。

关于每个线程仅使用一个索引的结构线程安全的 C++ 成员数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3486630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com