Python 线程(二):简单锁实现线程同步
2014-03-04 19:59
791 查看
Python中有两种锁,一个锁是原始的锁(原语), 不可重入,而另一种锁则是可重入的锁即递归锁。而是thread模块中,只提供了不可重入的锁,而在threading中则提供这两种锁。
可重入:当一个线程拥有一个锁的使用权后,再次获取锁的使用权时,不会阻塞,会立马得到使用权,则原始锁的话,则不行,会阻塞。
方法一:thead的不可重入锁
方法二:theading的Lock(不可重入锁)
方法三:threading的RLock(可重入)
可重入:当一个线程拥有一个锁的使用权后,再次获取锁的使用权时,不会阻塞,会立马得到使用权,则原始锁的话,则不行,会阻塞。
方法一:thead的不可重入锁
import thread import time lock = thread.allocate_lock() def Count(id): global num; while True: lock.acquire() if num <= 10: print "Thread id is : %s The num is %s\n" % (id, str(num)) num = num + 1 else: break lock.release() else: thread.exit_thread() if __name__ == "__main__": num = 1 thread.start_new_thread(Count, ('A',)) thread.start_new_thread(Count, ('B',)) time.sleep(5)
方法二:theading的Lock(不可重入锁)
import threading import time lock = threading.Lock() def Count(id): global num; while True: lock.acquire() if num <= 10: print "Thread id is : %s The num is %s\n" % (id, str(num)) num = num + 1 else: break lock.release() if __name__ == "__main__": num = 1 t1 = threading.Thread(target=Count, args=('A', )) t2 = threading.Thread(target=Count, args=('B', )) t1.start() t2.start() time.sleep(5)
方法三:threading的RLock(可重入)
import threading import time lock = threading.RLock() def CountNum(id): global num lock.acquire() if num <= 10: print "Thread id is : %s The num is %s\n" % (id, str(num)) num = num + 1 CountNum(id) lock.release() if __name__ == "__main__": num = 1 t1 = threading.Thread(target=CountNum, args=('A')) t1.start() time.sleep(5)
相关文章推荐
- python 异步线程简单实现
- Python实现线程状态监测简单示例
- python 线程简单使用----1利用threading 实现多线程
- Python_多线程1(创建线程,简单线程同步)
- 简单的线程消息队列实现
- 用python简单实现类似thinkphp的针对Mysql操作的数据模型
- python学习(1)--实现简单的服务器与客户端
- python实现简单爬虫功能
- 使用Python简单的实现树莓派的WEB控制
- Python 实现一个简单的http服务器
- Python获取linux主机ip的简单实现方法
- C# Synchronized 和 SyncRoot 实现线程同步的源码分析及泛型集合的线程安全访问
- python实现ad域简单认证
- Python实现的简单读写csv文件操作示例
- python使用threading获取线程函数返回值的实现方法
- python简单框架实现爬取NBA球员数据
- python调用c语言函数的一种简单实现方法
- python读写json文件的简单实现
- Python多进程同步简单实现代码
- Python实现的简单发送邮件脚本分享