消息关闭
    暂无新消息!

如何理解自旋锁和互斥锁?

问题作者 : 乖乖仔2017-06-13发布

网上的文章看了很多还是很迷茫,谁能通俗易懂的给我解释一下这两个概念啊?

我在python多线程编码中一般都是在线程的run方法中用while True死循环,然后在死循环的循环体末尾调用queue.task_done移除该队列,然后在主线程调用queue的join方法阻塞主线程,防止主线程直接结束,请问我这种多线程编码方式是否合理?会不会有什么bug?另外请问一下我在run中调用死循环是不是就叫做自旋锁?


1个回答

︿ 0

Python代码会按照这样的流程进行运行,

  1. 设置GIL

  2. 切换到某一个线程

  3. 运行

  4. 线程退出,设置为休眠状态

  5. 解锁GIL

  6. 重复以上操作

可能是因为GIL的原因,我似乎没有在Python里面看到过自旋锁,更多使用的是互斥锁。

下面是我以前写多线程的方法,仅供参考~

import Queue
from threading import Thread

temp_queue = Queue.Queue()


class Test(Thread):
    def __init__(self):
        Thread.__init__(self)

    def run(self):
        while temp_queue.empty() is False:
            pass
            # do sth here
            # temp = temp_queue.get()


tasks = []
for i in range(10):
    tasks.append(Test())

for task in tasks:
    task.start()

for task in tasks:
    task.join()

既然是队列,Queue中Queue().get()中说明了Remove and return an item from the queue.