一个相当基本的问题,但我没有看到它在任何地方被问到。
假设我们有一个全局结构(在 C 中),如下所示:
struct foo {
int written_frequently1;
int read_only;
int written_frequently2;
};
我似乎很清楚,如果我们有很多线程读写,我们需要一个信号量(或其他锁)在written_frequently
成员上,即使是读取,因为我们不能 100% 确定这个结构的分配是原子的.
如果我们想要很多线程来读取read_only
成员,而没有线程来写入,那么我们是否需要在结构访问上设置一个信号量来读取?
(我倾向于说不,因为不断更改之前和之后的位置这一事实不应该影响read_only
成员,并且读取该值的多个线程不应该相互干扰。但我不确定。 )
[编辑:我现在意识到我应该更好地问这个问题,以便非常具体地澄清我的意思。当然,当我第一次问这个问题时,我并没有真正理解所涉及的所有问题。当然,如果我现在全面编辑问题,我会毁掉所有这些好答案。我的意思更像是:
struct bar {
char written_frequently1[LONGISH_LEN];
char read_only[LONGISH_LEN];
char written_frequently2[LONGISH_LEN];
};
我问的主要问题是,由于这些数据是结构的一部分,它是否会受到其他结构成员的影响,是否会反过来影响它们?
事实上,成员是整数,因此写入可能是原子的,在这种情况下实际上只是一个红鲱鱼。]