如何利用tp-link按错900做网站,聊城网站优化案例,自己做个网站怎么做,wordpress $limit一个数据问价或记录可以被多个进程共享#xff0c;我们把只读该文件的进程称为“读者进程”#xff0c;其他进程为“写者进程”。允许多个进程同时读一个共享对象#xff0c;但不允许一个写者进程和其他写者进程或读者进程同时访问共享对象。即#xff1a;保证一个写者进程… 一个数据问价或记录可以被多个进程共享我们把只读该文件的进程称为“读者进程”其他进程为“写者进程”。允许多个进程同时读一个共享对象但不允许一个写者进程和其他写者进程或读者进程同时访问共享对象。即保证一个写者进程必须与其他进程互斥的访问共享对象的同步问题读者-写者问题常用来测试新同步原语。 1、问题解答思路
利用了锁和信号量进行同步以确保读者和写者之间不会相互干扰地访问缓冲区。读者可以同时访问缓冲区但写者必须具有排他性访问。ReaderWriter类包含了共享缓冲区、活跃读者数量、写入状态标志以及用于互斥访问和信号量的锁和信号量。read函数实现读者的行为。读者先获取read_sem信号量然后获取锁增加活跃读者数量如果是第一个读者就获取write_sem信号量以防止写者进入。读取缓冲区内容后减少活跃读者数量并在没有活跃读者时释放write_sem信号量。write函数实现写者的行为。写者首先获取write_sem信号量然后获取锁设置写入状态标志为True。写入数据到缓冲区后释放锁并设置写入状态标志为False最后释放write_sem信号量。最后创建了多个读者和写者线程并启动它们。然后等待所有线程结束。
2、问题流程图
graph TD; A[开始] -- B[初始化ReaderWriter对象]; B -- C[创建多个读者和写者线程]; C -- D[启动所有线程]; D -- E[等待所有线程结束]; E -- F[结束];
3、源码
import threading
import time
import randomclass ReaderWriter:def __init__(self):self.buffer [] #共享缓冲区self.readers 0 #活跃读者数量self.writing False #写入状态标志self.lock threading.Lock() #互斥访问锁self.read_sem threading.Semaphore(1)self.write_sem threading.Semaphore(1) #信号量def read(self, reader_id):while True:self.read_sem.acquire()self.lock.acquire()self.readers 1if self.readers 1:self.write_sem.acquire()self.lock.release()self.read_sem.release()print(f读者 {reader_id} 正在读: {self.buffer})self.lock.acquire()self.readers - 1if self.readers 0:self.write_sem.release()self.lock.release()time.sleep(random.random())def write(self, writer_id):while True:self.write_sem.acquire()self.lock.acquire()self.writing Trueself.lock.release()data random.randint(1, 100)self.buffer.append(data)print(f写者 {writer_id} 正在写: {data})self.lock.acquire()self.writing Falseself.write_sem.release()self.lock.release()time.sleep(random.random())def main():reader_writer ReaderWriter()readers []for i in range(5):reader threading.Thread(targetreader_writer.read, args(i,))readers.append(reader)writers []for i in range(2):writer threading.Thread(targetreader_writer.write, args(i,))writers.append(writer)for reader in readers:reader.start()for writer in writers:writer.start()for reader in readers:reader.join()for writer in writers:writer.join()if __name__ __main__:main()4、输出
读者 0 正在读: []
读者 1 正在读: []
读者 2 正在读: []
读者 3 正在读: []
读者 4 正在读: []
写者 0 正在写: 36
写者 1 正在写: 61
读者 1 正在读: [36, 61]
写者 0 正在写: 61
读者 1 正在读: [36, 61, 61]
写者 0 正在写: 85
读者 0 正在读: [36, 61, 61, 85]
写者 1 正在写: 69
读者 4 正在读: [36, 61, 61, 85, 69]
读者 1 正在读: [36, 61, 61, 85, 69]
读者 3 正在读: [36, 61, 61, 85, 69]
读者 2 正在读: [36, 61, 61, 85, 69]
读者 3 正在读: [36, 61, 61, 85, 69]
写者 0 正在写: 11
读者 0 正在读: [36, 61, 61, 85, 69, 11]
读者 4 正在读: [36, 61, 61, 85, 69, 11]
读者 2 正在读: [36, 61, 61, 85, 69, 11]
读者 1 正在读: [36, 61, 61, 85, 69, 11]
写者 1 正在写: 61
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61]
写者 1 正在写: 61
读者 3 正在读: [36, 61, 61, 85, 69, 11, 61, 61]
读者 2 正在读: [36, 61, 61, 85, 69, 11, 61, 61]
写者 1 正在写: 19
读者 1 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19]
写者 1 正在写: 77
写者 1 正在写: 3
读者 4 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3]
写者 0 正在写: 79
读者 4 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79]
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79]
读者 3 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79]
读者 1 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79]
读者 2 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79]
写者 1 正在写: 32
写者 1 正在写: 17
写者 0 正在写: 53
读者 1 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
读者 2 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
读者 4 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
读者 3 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
读者 4 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53]
写者 0 正在写: 89
写者 1 正在写: 92
读者 1 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92]
读者 3 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92]
读者 2 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92]
读者 2 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92]
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92]
写者 0 正在写: 28
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92, 28]
读者 0 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92, 28]
写者 1 正在写: 68
读者 4 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92, 28, 68]
读者 3 正在读: [36, 61, 61, 85, 69, 11, 61, 61, 19, 77, 3, 79, 32, 17, 53, 89, 92, 28, 68]
写者 0 正在写: 66进程已结束,退出代码-1
文章转载自: http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn http://www.morning.tcxk.cn.gov.cn.tcxk.cn http://www.morning.qrmry.cn.gov.cn.qrmry.cn http://www.morning.cknsx.cn.gov.cn.cknsx.cn http://www.morning.ygkk.cn.gov.cn.ygkk.cn http://www.morning.pdghl.cn.gov.cn.pdghl.cn http://www.morning.pzpj.cn.gov.cn.pzpj.cn http://www.morning.hdzty.cn.gov.cn.hdzty.cn http://www.morning.cpmfp.cn.gov.cn.cpmfp.cn http://www.morning.rfzbm.cn.gov.cn.rfzbm.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.mcmpq.cn.gov.cn.mcmpq.cn http://www.morning.xprq.cn.gov.cn.xprq.cn http://www.morning.dpdns.cn.gov.cn.dpdns.cn http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn http://www.morning.tkgxg.cn.gov.cn.tkgxg.cn http://www.morning.ylyzk.cn.gov.cn.ylyzk.cn http://www.morning.lcbgf.cn.gov.cn.lcbgf.cn http://www.morning.ffbp.cn.gov.cn.ffbp.cn http://www.morning.nkpml.cn.gov.cn.nkpml.cn http://www.morning.txltb.cn.gov.cn.txltb.cn http://www.morning.htjwz.cn.gov.cn.htjwz.cn http://www.morning.blqmn.cn.gov.cn.blqmn.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn http://www.morning.hnhkz.cn.gov.cn.hnhkz.cn http://www.morning.xkhhy.cn.gov.cn.xkhhy.cn http://www.morning.cwskn.cn.gov.cn.cwskn.cn http://www.morning.ggrzk.cn.gov.cn.ggrzk.cn http://www.morning.schwr.cn.gov.cn.schwr.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn http://www.morning.pxwzk.cn.gov.cn.pxwzk.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.krjrb.cn.gov.cn.krjrb.cn http://www.morning.xctdn.cn.gov.cn.xctdn.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.xnfg.cn.gov.cn.xnfg.cn http://www.morning.rswfj.cn.gov.cn.rswfj.cn http://www.morning.grryh.cn.gov.cn.grryh.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.lgtcg.cn.gov.cn.lgtcg.cn http://www.morning.fnywn.cn.gov.cn.fnywn.cn http://www.morning.sjpht.cn.gov.cn.sjpht.cn http://www.morning.gybnk.cn.gov.cn.gybnk.cn http://www.morning.wyrsn.cn.gov.cn.wyrsn.cn http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.ffmx.cn.gov.cn.ffmx.cn http://www.morning.lnrhk.cn.gov.cn.lnrhk.cn http://www.morning.hxycm.cn.gov.cn.hxycm.cn http://www.morning.xnnxp.cn.gov.cn.xnnxp.cn http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn http://www.morning.msfqt.cn.gov.cn.msfqt.cn http://www.morning.mqfkd.cn.gov.cn.mqfkd.cn http://www.morning.rbjf.cn.gov.cn.rbjf.cn http://www.morning.gtjkh.cn.gov.cn.gtjkh.cn http://www.morning.bxqry.cn.gov.cn.bxqry.cn http://www.morning.gywfp.cn.gov.cn.gywfp.cn http://www.morning.rtpw.cn.gov.cn.rtpw.cn http://www.morning.gygfx.cn.gov.cn.gygfx.cn http://www.morning.jmmzt.cn.gov.cn.jmmzt.cn http://www.morning.qgfy.cn.gov.cn.qgfy.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.huxinzuche.cn.gov.cn.huxinzuche.cn http://www.morning.zsrjn.cn.gov.cn.zsrjn.cn http://www.morning.rkdhh.cn.gov.cn.rkdhh.cn http://www.morning.gqtw.cn.gov.cn.gqtw.cn http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn http://www.morning.fgsqz.cn.gov.cn.fgsqz.cn http://www.morning.xrmwc.cn.gov.cn.xrmwc.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.jcffp.cn.gov.cn.jcffp.cn http://www.morning.flfdm.cn.gov.cn.flfdm.cn http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn