0

这是我的回调函数,我将 rcv_buffer 设置为全局

def rx_callback(ok, payload):
    global n_rcvd, n_right, rcv_buffer
    n_rcvd += 1
    (pktno,) = struct.unpack('!H', payload[0:2])
    if ok:
        n_right += 1
        rcv_buffer.append((pktno, payload))

在 main() 中,我不断检查缓冲区以查看缓冲区是否为空:

   while 1:
        while len(rcv_buffer) > 0:
            (pktno, payload) = rcv_buffer.pop(0)
            print 'pktno = ', pktno, 'payload = ', payload[2:]

但我没有做任何同步!我可以确定我对列表的操作不会崩溃吗?谢谢!

4

1 回答 1

1

在 CPython 中,由于执行的解释性以及Global Interpeter Lock(确保在任何给定时间仅执行来自单个线程的单个字节码),这是安全的。

不过,其他 Python 实现可能非常宽容……

于 2012-12-02T08:32:46.410 回答