-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Open
Description
// 以下代码是不是可以不用加写锁,代码段一和代码段二对setNextReady的更新不存在并发问题,必须代码段一中先执行buffer.setNextReady(true);,才会走到代码段二中,唯一可能造成数据不一致的是nextReady=false时,threadRunning=true,但是buffer.getThreadRunning().compareAndSet(false, true)已经保证了,当线程未执行完代码段一时,是不可能有别的线程进入的
// 代码段一
if (updateOk) {
buffer.wLock().lock();
buffer.setNextReady(true);
buffer.getThreadRunning().set(false);
buffer.wLock().unlock();
} else {
buffer.getThreadRunning().set(false);
}
// 代码段二
if (buffer.isNextReady()) {
buffer.switchPos();
buffer.setNextReady(false);
}
Metadata
Metadata
Assignees
Labels
No labels