• Thread Based Parallelism


     1 Thread Based Parallelism - Thread Synchronization With Lock
     2 
     3     import threading
     4 
     5     shared_resource_with_lock = 0
     6     shared_resource_with_no_lock = 0
     7     COUNT = 100000
     8     shared_resource_lock = threading.Lock()
     9 
    10 
    11     ####LOCK MANAGEMENT##
    12     def increment_with_lock():
    13         global shared_resource_with_lock
    14         for i in range(COUNT):
    15             shared_resource_lock.acquire()
    16             shared_resource_with_lock += 1
    17             shared_resource_lock.release()
    18 
    19 
    20     def decrement_with_lock():
    21         global shared_resource_with_lock
    22         for i in range(COUNT):
    23             shared_resource_lock.acquire()
    24             shared_resource_with_lock -= 1
    25             shared_resource_lock.release()
    26 
    27 
    28     ####NO LOCK MANAGEMENT ##
    29     def increment_without_lock():
    30         global shared_resource_with_no_lock
    31         for i in range(COUNT):
    32             shared_resource_with_no_lock += 1
    33 
    34 
    35     def decrement_without_lock():
    36         global shared_resource_with_no_lock
    37         for i in range(COUNT):
    38             shared_resource_with_no_lock -= 1
    39 
    40 
    41     ####the Main program
    42     if __name__ == "__main__":
    43         t1 = threading.Thread(target=increment_with_lock)
    44         t2 = threading.Thread(target=decrement_with_lock)
    45         t3 = threading.Thread(target=increment_without_lock)
    46         t4 = threading.Thread(target=decrement_without_lock)
    47         t1.start()
    48         t2.start()
    49         t3.start()
    50         t4.start()
    51         t1.join()
    52         t2.join()
    53         t3.join()
    54         t4.join()
    55         print("the value of shared variable with lock management is %s" 
    56               % shared_resource_with_lock)
    57         print("the value of shared variable with race condition is %s" 
    58               % shared_resource_with_no_lock)
    59 
    60     Output,
    61         the value of shared variable with lock management is 0 
            # 会发现
    shared_resource_with_lock 恒定为 0;
            # 因为 lock 的存在, increment 的数值等于 decrement 的数值.
    62      the value of shared variable with race condition is -9657
            # shared_resource_with_no_lock 会为一个随机, 有时候也为 0.
  • 相关阅读:
    httpRuntime 元素(ASP.NET 设置架构)
    Change GridView RowColor OnMouseClick
    创建自定义配置结
    设置自定义服务器控件的TagPrefix
    使用DataTable.ReadXml时抛出异常
    正则表达式的字符,定位字符和重复字符
    URL 编码
    tschs.xml 全文索引文件配置说明
    SQL2005 全文索引 contains
    SQL 语句执行时间
  • 原文地址:https://www.cnblogs.com/zzyzz/p/8436451.html
Copyright © 2020-2023  润新知