国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

對python多線程中Lock()與RLock()鎖詳解

2020-02-16 00:35:42
字體:
供稿:網(wǎng)友

資源總是有限的,程序運行如果對同一個對象進行操作,則有可能造成資源的爭用,甚至導致死鎖

也可能導致讀寫混亂

鎖提供如下方法:

1.Lock.acquire([blocking])

2.Lock.release()

3.threading.Lock() 加載線程的鎖對象,是一個基本的鎖對象,一次只能一個鎖定,其余鎖請求,需等待鎖釋放后才能獲取

4.threading.RLock() 多重鎖,在同一線程中可用被多次acquire。如果使用RLock,那么acquire和release必須成對出現(xiàn),

調(diào)用了n次acquire鎖請求,則必須調(diào)用n次的release才能在線程中釋放鎖對象

例如:

無鎖:

#coding=utf8import threadingimport timenum = 0def sum_num(i):  global num  time.sleep(1)  num +=i  print numprint '%s thread start!'%(time.ctime())try:  for i in range(6):    t =threading.Thread(target=sum_num,args=(i,))    t.start()except KeyboardInterrupt,e:  print "you stop the threading"print '%s thread end!'%(time.ctime())

輸出:

Sun May 28 20:54:59 2017 thread start!Sun May 28 20:54:59 2017 thread end!01371015

結(jié)果顯示混亂

引入鎖:

#coding=utf8import threadingimport timenum = 0def sum_num(i):  lock.acquire()  global num  time.sleep(1)  num +=i  print num  lock.release()print '%s thread start!'%(time.ctime())try:  lock=threading.Lock()  list = []  for i in range(6):    t =threading.Thread(target=sum_num,args=(i,))    list.append(t)    t.start()  for threadinglist in list:    threadinglist.join()except KeyboardInterrupt,e:  print "you stop the threading"print '%s thread end!'%(time.ctime())

結(jié)果:

Sun May 28 21:15:37 2017 thread start!01361015Sun May 28 21:15:43 2017 thread end!

其中:

lock=threading.Lock()加載鎖的方法也可以換成lock=threading.RLock()

如果將上面的sum_num修改為:

  lock.acquire()  global num  lock.acquire()  time.sleep(1)  num +=i  lock.release()  print num  lock.release()

那么:

lock=threading.Lock() 加載的鎖,則一直處于等待中,鎖等待

而lock=threading.RLock() 運行正常

以上這篇對python多線程中Lock()與RLock()鎖詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴业县| 武定县| 宾阳县| 盐津县| 墨脱县| 城固县| 博湖县| 梧州市| 隆德县| 库伦旗| 孟村| 叶城县| 曲靖市| 寻乌县| 新余市| 鲜城| 九寨沟县| 枝江市| 高雄县| 铅山县| 平山县| 河池市| 泾川县| 辽源市| 荣成市| 璧山县| 子长县| 英吉沙县| 宿迁市| 大庆市| 固阳县| 鄂托克前旗| 巨鹿县| 会宁县| 师宗县| 兖州市| 镇雄县| 镇坪县| 民和| 泰兴市| 益阳市|