经典python同步问题--有兴趣的都来看看

pshpan 2008-12-22 05:23:06
要求:使用线程同步交叉输出ab.
下面这段代码看上去正常,输出时却出现了连续的aa 或bb。
请牛人赐教.

import time,thread
lock = thread.allocate_lock()

def myfunction(string,lock,*args):
while 1:
lock.acquire()
print string
lock.release()

if __name__=="__main__":
thread.start_new_thread(myfunction,('a',lock))
thread.start_new_thread(myfunction,('b',lock))

time.sleep(2)
exit(0)
...全文
294 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cg1227 2009-03-10
  • 打赏
  • 举报
回复
我感觉需要两个lock
pshpan 2008-12-23
  • 打赏
  • 举报
回复
哈哈,这个不是问题所在。

如果这段代码是c,1个锁就绝对够了。

修改后使用两把锁搞定。
线程1:
lock1.acquire()
do work
lock2.release()


观望中,看谁能给出更合理的答案。
maplele20 2008-12-23
  • 打赏
  • 举报
回复
把lock设置为全局,直接在myfunction使用,不要作为参数传进去。
king6o60 2008-12-22
  • 打赏
  • 举报
回复
线程只保证同步,未保证交叉阿。
我猜

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧