反应游戏 FPGA 设计 Verilog Quartus
2026/6/4 18:35:23
所有的读写锁都遵守以下三条基本原则:
1.允许多个线程同时读共享变量;
2.只允许一个线程写共享变量;
3.如果一个写线程正在执行写操作,此时禁止读线程读共享变量。
packagecom.zhss.data.refill.center.test;importjava.util.HashMap;importjava.util.Map;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantReadWriteLock;publicclassCache<K,V>{privatefinalMap<K,V>m=newHashMap<>();privatefinalReentrantReadWriteLockrwl=newReentrantReadWriteLock();privatefinalLockr=rwl.readLock();privatefinalLockw=rwl.writeLock();publicVget(Kk){try{r.lock();System.out.println(Thread.currentThread().getName()+"读取key:"+k);returnm.get(k);}finally{r.unlock();}}publicVput(Kkey,Vval){w.lock();try{System.out.println(Thread.currentThread().getName()+"写入key:"+key+",值:"+val);returnm.put(key,val);}finally{w.unlock();}}}备注:
读锁 → 写锁 = 锁升级 = 死锁!
写锁 → 读锁 = 锁降级 = 允许!