程序同步3 補充 資料的加鎖操作

2021-08-03 06:14:02 字數 2493 閱讀 4753

1.  模擬搶票 防止出現多人搶同一張票

#!/usr/bin/env python

# -*- coding:utf-8 -*-

#author:xp

#blog_url:

from multiprocessing import process,lock

import time

import random

import json

'''模擬搶票 會有很多人搶票成功 但是配置檔案裡只有一張票

配置檔案內容

'''# def work(dbfile,name,lock):

# with open(dbfile,encoding='utf-8') as f:

# dic=json.loads(f.read())

## if dic['count'] > 0:

# dic['count'] -= 1

# time.sleep(random.randint(1,3))#模擬網路延遲

# with open(dbfile,'w',encoding='utf-8') as f:

# f.write(json.dumps(dic))

# print('\033[43m %s 搶票成功 \033[0m' %name)

# else:

# print('\033[45m %s搶票失敗 \033[0m' % name)

## if __name__ == '__main__':

# lock=lock()

# p_l=

# for i in range(100):

# p1=process(target=work,args=('a.txt',i,lock))

# p1.start()

# for i in p_l:

# i.join()

# print('主程序')

'''使用lock

對指定**塊加鎖 防止衝突

'''def work(dbfile,name,lock):

lock.acquire()

with open(dbfile,encoding='utf-8') as f:

dic=json.loads(f.read())

if dic['count'] > 0:

dic['count'] -= 1

time.sleep(random.randint(1,3))#模擬網路延遲

with open(dbfile,'w',encoding='utf-8') as f:

f.write(json.dumps(dic))

print('\033[43m %s 搶票成功 \033[0m' %name)

else:

print('\033[45m %s搶票失敗 \033[0m' % name)

lock.release()

if __name__ == '__main__':

lock=lock()

p_l=

for i in range(100):

p1=process(target=work,args=('a.txt',i,lock))

p1.start()

for i in p_l:

i.join()

print('主程序')

'''上下文管理的方式加鎖

使用with lock:

'''def work(dbfile,name,lock):

with lock:

with open(dbfile,encoding='utf-8') as f:

dic=json.loads(f.read())

if dic['count'] > 0:

dic['count'] -= 1

time.sleep(random.randint(1,3))#模擬網路延遲

with open(dbfile,'w',encoding='utf-8') as f:

f.write(json.dumps(dic))

print('\033[43m %s 搶票成功 \033[0m' %name)

else:

print('\033[45m %s搶票失敗 \033[0m' % name)

if __name__ == '__main__':

lock=lock()

p_l=

for i in range(100):

p1=process(target=work,args=('a.txt',i,lock))

p1.start()

for i in p_l:

i.join()

print('主程序')

作業系統筆記 程序同步(3)

讀者寫者問題 哲學家就餐問題 小結描述 這是乙個多程序併發協作的問題 也可以是多執行緒 在這裡我們涉及到了兩類程序,一類是生產者程序,一類是消費者程序,生產者用於生產資料,消費者用於處理生產者生產的資料,所有消費者處理的資料必須由生產者生產得到。為了解耦這兩類程序之間的關係,我們引入乙個資料緩衝池,...

作業系統中的程序同步

在進行多執行緒執行過程中,對於共享資源的訪問會出現不可知的異常。臨界區 臨界區就是為了避免這種異常的發生,當乙個執行緒進入臨界區的時候,就定義乙個標誌,表示現在臨界區正在被訪問,其他執行緒只能等待。但是臨界區的實現還是沒有辦法完全避免多個執行緒同時訪問臨界區而產生的異常。只是異常發生的概率會小很多。...

作業系統中的程序同步詳析

程序同步包括程序的互斥和程序的同步兩個方面,是作業系統管理共享資源的一種手段。從考試情況來看,許多考生對這部分知識掌握的不好,理解的不透。用 操作解決程序同步問題時首先應確定問題是屬於程序互斥還是程序同步,或是互斥與同步的混合問題。然後根據共享資源的數量以及使用共享資源的規則正確的定義訊號量及其初值...