python3 threading执行顺序

def __thread_job():
    print('这是一个新线程: %s' % threading.current_thread());

    print('T1 start \n');

    for i in range(10):
        time.sleep(0.1);


    print('T1 finished');


def show_threading():
    thread = threading.Thread(target=__thread_job, name='T1');

    thread.start();



if(__name__ == '__main__'):
    show_threading();

    print('done');

多次执行会返回两个结果
图片描述

图片描述

请问为什么会出现第二个结果呢。

阅读 3k
1 个回答

这个应该是多线程锁的问题。

以下内容摘自网络:

多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。

线程调度本质上是不确定的,因此,在多线程程序中错误地使用锁机制可能会导致随机数据损坏或者其他的异常行为,我们称之为竞争条件。为了避免竞争条件,最好只在临界区(对临界资源进行操作的那部分代码)使用锁。

Python Cookbook里面有一章节详细的简述该话题。
给关键部分加锁

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进