多线程共享一个队列

 1 # -*- coding:utf-8 -*-
 2 import threading
 3 from time import sleep
 4 lock = threading.Lock()
 5 tmp_list = []
 6 class MyThread(threading.Thread):
 7     """
 8     此线程用于向公共队列中追加元素
 9     """
10     def __init__(self):
11         threading.Thread.__init__(self) 
12     #: 向公共队列追加元素
13     def run(self):
14         i = 1
15         sleep(1)
16         while True:
17             tmp_list.append(i)
18             print "i = %d, tmp_list = %s" %(i, tmp_list)
19             i += 1
20             sleep(1)
21 
22 def main():
23     sub_thread = MyThread()
24     sub_thread.start() 
25     sleep(3)
26     while True:
27         length = len(tmp_list)
28         try:
29             if length > 0:
30                 print "after pop, list is : %s" %tmp_list
31             for j in range(length):
32                 tmp_list.pop()
33             
34         except IndexError:
35             print "list empty"
36             continue
37 
38 if __name__ == "__main__":
39     main()

以上代码结果显示,涉及多线程工操作同一队列时,一插一查/删,即两者不会相互影响,不需要对队列加锁,

如果涉及其一线程操作会影响另一者操作,则要加锁。

涉及到容器类的加锁,应避免全局加锁,尽量局部加锁,并及时释放锁。

转载于:https://www.cnblogs.com/johnchain/p/3431028.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值