我正在学习线程、信号量、volatile变量等IT技术相关知识。
我想知道,在使用信号量时是否需要将变量定义为volatile,我的意思是:
假设有两个线程,一个增加变量的值,另一个减少变量的值。在每次访问变量之前,我会使用互斥锁来控制只有一个线程能够“操作”该变量。
这种情况下,是否需要将变量定义为volatile?
我正在学习线程、信号量、volatile变量等IT技术相关知识。
我想知道,在使用信号量时是否需要将变量定义为volatile,我的意思是:
假设有两个线程,一个增加变量的值,另一个减少变量的值。在每次访问变量之前,我会使用互斥锁来控制只有一个线程能够“操作”该变量。
这种情况下,是否需要将变量定义为volatile?
根据Semaphore的API文档:
内存一致性影响:在线程调用“release”方法(如
release()
)之前发生的操作先于在另一个线程中成功调用“acquire”方法(如acquire()
)之后发生的操作。
因此,通过信号量保护的变量可以安全地读写。无需将它们声明为volatile
。
AtomicLong
来进行这样的操作呢?在同一个整数上正确且高效地实现并发操作并不容易。JDK中有一些现成的类可以帮助你完成这项工作。 - Tagir Valeev