1. 程式人生 > >多執行緒---共享全域性變數

多執行緒---共享全域性變數

多執行緒-共享全域性變數


from threading import Thread
import time

g_num = 100

def work1():
    global g_num
    for i in range(3):
        g_num += 1

    print("----in work1, g_num is %d---"%g_num)


def work2():
    global g_num
    print("----in work2, g_num is %d---"%g_num)


print("---執行緒建立之前g_num is %d---"
%g_num) t1 = Thread(target=work1) t1.start() #延時一會,保證t1執行緒中的事情做完 time.sleep(1) t2 = Thread(target=work2) t2.start()

執行結果:

---執行緒建立之前g_num is 100---
----in work1, g_num is 103---
----in work2, g_num is 103---

列表當做實參傳遞到執行緒中

from threading import Thread
import time

def work1(nums):
    nums.append(44)
    print("----in work1---"
,nums) def work2(nums): #延時一會,保證t1執行緒中的事情做完 time.sleep(1) print("----in work2---",nums) g_nums = [11,22,33] t1 = Thread(target=work1, args=(g_nums,)) t1.start() t2 = Thread(target=work2, args=(g_nums,)) t2.start()

執行結果:

----in work1--- [11, 22, 33, 44]
----in work2--- [11, 22, 33, 44
]

總結:

  • 在一個程序內的所有執行緒共享全域性變數,能夠在不適用其他方式的前提下完成多執行緒之間的資料共享(這點要比多程序要好)
  • 缺點就是,執行緒是對全域性變數隨意遂改可能造成多執行緒之間對全域性變數的混亂(即執行緒非安全)

相關推薦

執行-共享全域性變數

from threading import Thread import time g_num = 100 def work1(): global g_num for i in range(3): g_num += 1 print("----in wo

python執行-共享全域性變數

目錄 多執行緒-共享全域性變數 多執行緒-共享全域性變數 列表當作實參傳遞到執行緒中 總結 多執行緒-共享全域性變數問題 多執行緒開發可能遇到的問題 測試1 測試2 多執行緒-共享全域性變數 多執行緒-共享全域性變

執行---共享全域性變數

多執行緒-共享全域性變數 from threading import Thread import time g_num = 100 def work1(): global g_num

執行-共享全域性變數問題

1. 多執行緒同時對全域性變數進行操作 import threading #定義全域性變數 g_num = 0 #迴圈一次給全域性變數加1 def sum_num1(): for i in range(1000000): global g_num g_num +

Python 執行,(全域性變數)資料共享,threading.Lock() 互斥鎖

  demo.py(互斥鎖): import threading import time # 定義一個全域性變數 g_num = 0 def test1(num): global g_num # 全域性變數可以實現執行緒間資料共享。也可以通過傳參實現 fo

基於執行全域性變數

def current_nation default_nation = (current_contact && current_contact&.company&.country) ? current_contact&.company&.count

Linux--執行訪問全域性變數互斥的例子

以下案例是兩個執行緒同時訪問一個全域性worker變數,並分別對裡面的成員counter進行增長 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include &

執行執行共享區域性變數的方法

1. 操作相同時,寫一個 Runnable 實現類,內部設定成員變數,run 方法修改該變數,將該Runnable傳給不同Thread使用; 2. 操作不同時,在Thread呼叫類例項化一個數據實例,傳遞給不同Runnable處理,再把不同的Runnable傳給不同Thre

python-執行-共享變數問題

import threading sum = 0 loopSum = 1000000 lock = threading.Lock() def Add(): global sum, loopSum for i in range(1,loopSum): loc

JAVA執行——共享變數

【轉載】Java多執行緒程式設計:變數共享分析(Thread) 原部落格網址:https://www.cnblogs.com/xudong-bupt/archive/2013/05/22/3087864.html

Java執行操作區域性變數全域性變數

在這篇文章裡,我們首先闡述什麼是同步,不同步有什麼問題,然後討論可以採取哪些措施控制同步,接下來我們會仿照回顧網路通訊時那樣,構建一個伺服器端的“執行緒池”,JDK為我們提供了一個很大的concurrent工具包,最後我們會對裡面的內容進行探索。   為什麼要執

PYTHON——執行:條件變數(Condition)

  條件變數(Condition)也是一把鎖,除了同步鎖的作用外,還具有線上程間通訊的功能。   有一類執行緒需要滿足條件之後才能夠繼續執行,Python提供了threading.Condition 物件用於條件變數執行緒的支援,它除了能提供RLock()或Lock()的方法外,還提供了 wait()、no

執行共享資源

多執行緒共享資源 按照作業系統原理,程序是系統資源分配的最小單位,執行緒是cpu排程的最小單位。執行緒共享程序申請的資源,但是執行緒有維持自己正常執行的很小的資源,這很小的資源為各個執行緒獨有。 同一個程序中建立的多執行緒共享的環境包括: 程序程式碼段 程序的公有資

c/c++ 執行 利用條件變數實現執行安全的佇列

多執行緒 利用條件變數實現執行緒安全的佇列 背景:標準STL庫的佇列queue是執行緒不安全的。 利用條件變數(Condition variable)簡單實現一個執行緒安全的佇列。 程式碼: #include <queue> #include <memory> #include

執行之原子變數CAS演算法(二)

上篇博文,我們介紹了多執行緒之記憶體可見性Volatile(一),但是也遺留了一個問題,如何保證變數的”原子性操作(Atomic operations)”? Volatile保證部分型別的原子性 上篇博文,我們說Voloatile不能保證原子性,有一點侷

執行程式設計——條件變數

#include <pthread.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> /* 靜態方式初始化一個互斥鎖和一個條件變數 */ static pthread

兩種方式實現執行共享資源(典型的售票例子)

1、繼承Thread TestThread類 public class TestThread extends Thread{ private int ticket = 300; @Override public void run() { while(true){

執行 共享資源 同步鎖 java Java執行程式設計:Lock

Java多執行緒程式設計:Lock   synchronized是java中的一個關鍵字,也就是說是Java語言內建的特性。那麼為什麼會出現Lock呢?   如果一個程式碼塊被synchronized修飾了,當一個執行緒獲取了對應的鎖,並執行該程式碼塊時,其他執行緒便只

執行共享操作實列

專案需求      最近在做一個和支付相關的專案,由於上游通道對每個商戶交易額度有上限風控。因此我們需要實現一個商戶輪詢的機制,通過使用多個商戶號,來提高交易上限,滿足交易需求。需求分析      通過需求分析,我們知道商戶的交易額度是共享資源,因此涉及到了共享資源同步的問題

Java執行中static變數的使用 SimpleDateFormat時間格式化存線上程安全問題

兩篇文章 Java多執行緒中static變數的使用  (轉自:http://blog.csdn.net/yy304935305/article/details/52456771) &&  SimpleDateFormat時間格式化存線上程安全問題