多线程数据共享

作者:管理员 发布时间:2020-12-02 12:52

    多线程是每个任务单独执行的,正常而言,数据都是不共通的,但我们实际业务中,每个线程虽独立运行,但软件是个整体业务流程,大部分情况下,需要实现数据的共享;

实现数据共享分为2部分,1是需要一个全局共享的变量,2是在修改这个变量时,不能让他们同时改;

代码如下:

import threading
import time
 
# 定义一个全局变量
g_num = 0
 
 
def test1(num):
    global g_num  # 全局变量可以实现线程间数据共享。也可以通过传参实现
 
    for i in range(num):
        mutex.acquire()  # 上锁
        g_num += 1
        mutex.release()  # 解锁
    print("-----in test1 g_num=%d----" % g_num)
 
 
def test2(num):
    global g_num
    for i in range(num):
        mutex.acquire()  # 上锁
        g_num += 1
        mutex.release()  # 解锁
    print("-----in test2 g_num=%d=----" % g_num)
 
 
# 创建一个互斥锁,默认是没有上锁的
mutex = threading.Lock()
 
 
def main():
    t1 = threading.Thread(target=test1, args=(1000000,))
    t2 = threading.Thread(target=test2, args=(1000000,))
 
    t1.start()
    t2.start()
 
    # 等待上面的2个线程执行完毕....
    time.sleep(2)
 
    print("-----in main Thread g_num = %d---" % g_num)
 
if __name__ == "__main__":
    main()


通过global声明使用的变量为全局变量;用过锁来保证修改数据时不发生冲突;


标签:
Copyright © 2020 万物律动 旗下 AI算法狮 京ICP备20010037号-1
本站内容来源于网络开放内容的收集整理,并且仅供学习交流使用;
如有侵权,请联系删除相关内容;