stackless python如何给tasklet加锁

stacless本身并不支持锁机制,但是可以通过channel的send和receive方法来模拟,下面是一个简单的锁。
import stackless

class TaskLock(stackless.channel):

    def __init__(self):
        self._islock = False
        self.tasklet = None

    def lock(self):
        if self._islock == True :
            self.receive()

        self.tasklet = stackless.getcurrent()
        self._islock = True

    def unlock(self):
        self.tasklet = None
        self._islock = False

        if self.balance < 0 :
            self.send(0)

lock = TaskLock()
lock.lock()
...
lock.unlock()


你可能感兴趣的:(python)