多线程下的线程执行顺序问题

多线程下的线程执行顺序问题



[Copy to clipboard] [ - ]
CODE:
import thread, time

def counter(myId, count):
    for i in range(count):
        mutex.acquire( )
        time.sleep(1)
        print '[%s] => %s' % (myId, i)
        mutex.release( )

mutex = thread.allocate_lock( )
for i in range(10):
    thread.start_new_thread(counter, (i, 3))

time.sleep(60)
print 'Main thread exiting.'

执行了好几次,结果都是

[Copy to clipboard] [ - ]
CODE:
[0] => 0
[0] => 1
[0] => 2
[3] => 0
[3] => 1
[3] => 2
[6] => 0
[6] => 1
[6] => 2
[9] => 0
[9] => 1
[9] => 2
[4] => 0
[4] => 1
[4] => 2
[8] => 0
[8] => 1
[8] => 2
[5] => 0
[5] => 1
[5] => 2
[2] => 0
[2] => 1
[2] => 2
[7] => 0
[7] => 1
[7] => 2
[1] => 0
[1] => 1
[1] => 2
Main thread exiting.

为什么每次都是0 3 6 9 4 8 5 2 7 1
而不是0 1 2 3 4 5 6 7 8 9 或别的顺序呢
你应该理解一下:
所有线程是在
for i in range(10):
    thread.start_new_thread(counter, (i, 3))
产生的:
主线程继续产生新的线程,同时产生的线程开始排队并执行函数counter。
所以,执行counter的结果一般是随机的。
你可以调节一下counter函数里的sleep时间。
1是取消,结果大多数是0-9顺序的结果
2设置其他正数,我看到的大多倒是你说的结果。其他情况也有,但比较少,比如你把counter时间设为5,然后把主线程的sleep时间也相应加大到所有线程能执行完。
我得看看,期待高人指点