标签: atomic

原子和非原子属性之间有什么区别?

财产申报中的含义atomicnonatomic含义是什么?

@property(nonatomic, retain) UITextField *userName;
@property(atomic, retain) UITextField *userName;
@property(retain) UITextField *userName;
Run Code Online (Sandbox Code Playgroud)

这三者之间的运作区别是什么?

properties atomic objective-c ios nonatomic

1828
推荐指数
20
解决办法
47万
查看次数

atomic/volatile/synchronized有什么区别?

原子/易失性/同步如何在内部工作?

以下代码块之间有什么区别?

代码1

private int counter;

public int getNextUniqueIndex() {
    return counter++; 
}
Run Code Online (Sandbox Code Playgroud)

代码2

private AtomicInteger counter;

public int getNextUniqueIndex() {
    return counter.getAndIncrement();
}
Run Code Online (Sandbox Code Playgroud)

代码3

private volatile int counter;

public int getNextUniqueIndex() {
    return counter++; 
}
Run Code Online (Sandbox Code Playgroud)

是否volatile以下列方式工作?是

volatile int i = 0;
void incIBy5() {
    i += 5;
}
Run Code Online (Sandbox Code Playgroud)

相当于

Integer i = 5;
void incIBy5() {
    int temp;
    synchronized(i) { temp = i }
    synchronized(i) { i = temp + 5 }
}
Run Code Online (Sandbox Code Playgroud)

我认为两个线程不能同时进入同步块...我是对的吗?如果这是真的那么如何atomic.incrementAndGet()工作没有synchronized …

java multithreading synchronization atomic volatile

282
推荐指数
4
解决办法
13万
查看次数

"原子"在编程中意味着什么?

在Effective Java一书中,它指出:

语言规范保证读取或写入变量是原子的,除非变量是类型longdouble[JLS,17.4.7].

"原子"在Java编程或一般编程的上下文中意味着什么?

java atomic

250
推荐指数
5
解决办法
13万
查看次数

AtomicInteger的实际用途

我有点理解AtomicInteger和其他Atomic变量允许并发访问.在什么情况下这个类通常使用?

java concurrency atomic

214
推荐指数
8
解决办法
18万
查看次数

num ++是'int num'的原子吗?

一般地,对于int num,num++(或++num),作为读-修改-写操作中,是不是原子.但我经常看到编译器,例如GCC,为它生成以下代码(在这里尝试):

在此输入图像描述

由于第5行对应于num++一条指令,我们可以得出结论,在这种情况下num++ 是原子的吗?

如果是这样,是否意味着如此生成num++可以在并发(多线程)场景中使用而没有任何数据争用的危险(例如,我们不需要制作它,std::atomic<int>并强加相关成本,因为它是无论如何原子)?

UPDATE

请注意,这个问题不是增量是否原子的(它不是,而且是问题的开头行).它是否可以在特定场景中,即在某些情况下是否可以利用单指令性质来避免lock前缀的开销.而且,作为公认的答案约单处理器的机器,还有部分提到这个答案,在其评论和其他人谈话解释,它可以(尽管不是C或C++).

c c++ assembly multithreading atomic

148
推荐指数
8
解决办法
1万
查看次数

!=检查线程是否安全?

我知道复合操作i++不是线程安全的,因为它们涉及多个操作.

但是检查引用本身是一个线程安全的操作?

a != a //is this thread-safe
Run Code Online (Sandbox Code Playgroud)

我尝试编程并使用多个线程,但它没有失败.我想我无法在我的机器上模拟比赛.

编辑:

public class TestThreadSafety {
    private Object a = new Object();

    public static void main(String[] args) {

        final TestThreadSafety instance = new TestThreadSafety();

        Thread testingReferenceThread = new Thread(new Runnable() {

            @Override
            public void run() {
                long countOfIterations = 0L;
                while(true){
                    boolean flag = instance.a != instance.a;
                    if(flag)
                        System.out.println(countOfIterations + ":" + flag);

                    countOfIterations++;
                }
            }
        });

        Thread updatingReferenceThread = new Thread(new Runnable() {

            @Override
            public void run() …
Run Code Online (Sandbox Code Playgroud)

java multithreading atomic thread-safety race-condition

140
推荐指数
6
解决办法
1万
查看次数

什么是std :: atomic?

我明白这std::atomic<>是一个原子对象.但原子到什么程度?根据我的理解,操作可以是原子的.使对象成为原子意味着什么?例如,如果有两个线程同时执行以下代码:

a = a + 12;
Run Code Online (Sandbox Code Playgroud)

然后是整个操作(比方说add_twelve_to(int))原子?或者是变量原子(so operator=())的变化?

c++ multithreading atomic c++11

129
推荐指数
3
解决办法
9万
查看次数

什么时候使用volatile多线程?

如果有两个线程访问全局变量,那么许多教程都说使变量volatile变为阻止编译器将变量缓存在寄存器中,从而无法正确更新.但是,访问共享变量的两个线程是通过互斥锁来调用保护的东西不是吗?但是在这种情况下,在线程锁定和释放互斥锁之间,代码处于一个关键部分,只有那个线程可以访问变量,在这种情况下变量不需要是volatile?

那么多线程程序中volatile的用途/目的是什么?

c++ concurrency multithreading atomic volatile

121
推荐指数
3
解决办法
5万
查看次数

AtomicInteger lazySet vs. set

lazySetset方法有AtomicInteger什么区别?该文件并没有太多的话要说lazySet:

最终设置为给定值.

似乎存储的值不会立即设置为所需的值,而是计划在将来的某个时间设置.但是,这种方法的实际用途是什么?任何例子?

java concurrency atomic

109
推荐指数
5
解决办法
3万
查看次数

OpenMP中的原子和关键有什么区别?

OpenMP中的原子和关键有什么区别?

我可以做这个

#pragma omp atomic
g_qCount++;
Run Code Online (Sandbox Code Playgroud)

但是不一样

#pragma omp critical
g_qCount++;
Run Code Online (Sandbox Code Playgroud)

atomic openmp critical-section

103
推荐指数
5
解决办法
7万
查看次数