问题背景:一个数据文件或记录,可以被多个进程或者线程共享,其中不同的读进程可以并发的访问该临界资源,读和写进程或者线程,不能并发的对该临界资源进行操作,否则造成脏读和脏写,写和写进程之间也是互斥的。而我们今天的读者和写者模式 也称为读写锁,不过这里以信号量的方式进行互斥操作,就可以解决这个问题。
下面来看代码
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class RWTest {
//创建一个用于记录正在读的读进程数
static int readCount=0;
//创建一个读写线程共享的临界资源
static int sse=0;
public static void main(String[] args) {
//创建一个线程池
ExecutorService es=Executors.newFixedThreadPool(10);
//创建一个读写互斥的信号量
final Semaphore wmutex=new Semaphore(1,true);
//创建