我已在下面的代码段:访问来自两个线程变量用C
int attempts = 0;
while(ptr== NULL && attempts < 60) {
sleep(1000);
attempts++;
}
连续环路等待指针由另一个线程来设置。另一个线程只会做
ptr = //some value
我的问题是,这是安全的吗?这会导致任何内存损坏,导致以后很难调试错误条件?
P.S:我知道由于缺少volatile关键字,编译器可能会优化ptr。这对我来说并不重要。我只关心这是否会给代码的其他不相关部分带来问题。
考虑使用此参考文献中描述的原子操作http://en.cppreference.com/w/c/atomic它是在C11规范中引入的。 'atomic_compare_exchange_strong'是你在循环中需要的。 – bkausbk 2014-09-02 09:04:16
看起来很安全,赋值操作是原子的。但是,这种方法并不理智,如果在你睡觉的时候,ptr会被改变成某个值,然后又变回NULL。 – 2014-09-02 09:09:41
另一个线程只会执行 - 只有一个写入线程?如果是的话,它似乎是安全的,因为它是简单的汇编指令(x86上的mov)。如果不是,那么这是不安全的。 – someuser 2014-09-02 09:19:01