Python,反原子增量

时间:2014-05-08 16:37:45

标签: python

如何将以下代码从Java翻译成Python?

AtomicInteger cont = new AtomicInteger(0);

int value = cont.getAndIncrement();

3 个答案:

答案 0 :(得分:31)

对于该值的任何使用,最有可能threading.Lock。除非你使用pypy,否则Python中没有原子修改(如果你这样做,请查看stm版本中的__pypy__.thread.atomic)。

答案 1 :(得分:24)

itertools.count返回一个迭代器,它将在每次迭代时执行等效的getAndIncrement()

示例:

import itertools
cont = itertools.count()
value = cont.next()

答案 2 :(得分:5)

这将执行相同的功能,虽然它不是无锁和名称' AtomicInteger'意味着。

注意其他方法也不是严格无锁的 - 它们依赖于GIL而不能在python解释器之间移植。

class AtomicInteger():
    def __init__(self, value=0):
        self._value = value
        self._lock = threading.Lock()

    def inc(self):
        with self._lock:
            self._value += 1
            return self._value

    def dec(self):
        with self._lock:
            self._value -= 1
            return self._value


    @property
    def value(self):
        with self._lock:
            return self._value

    @value.setter
    def value(self, v):
        with self._lock:
            self._value = v
            return self._value