使用 volatile 变量和信号量 - Java

Wik*_*low 2 java multithreading mutex semaphore volatile

我从线程、信号量、易失性变量等开始。我想知道当我使用信号量时是否有必要将变量定义为易失性,我的意思是:

有 2 个线程,一个增加,另一个减少变量,例如,很明显,在每次访问之前,我有一个互斥锁,可以随时控制只有一个线程在“玩”变量。

有必要定义为 volatile 吗?

isn*_*bad 5

来自Semaphore 的API 文档:

内存一致性影响:在调用“释放”方法之前的线程中的操作,例如在另一个线程中成功的“获取”方法之后的release() 发生之前的操作acquire()

所以读/写由信号量保护的变量是安全的。无需将它们声明为volatile.