我需要某些操作才能成为Atomic。
这里'Atomic'意味着“一旦该方法开始执行,它就不应该被中断直到它完成,甚至线程调度程序也不应该在运行状态下将该线程设置为Runnable状态”。
所有方法都是Native方法,并且多个线程同时运行以执行这些方法。
第一个问题:本机方法执行本质上是原子吗?
第二个问题:要实现Atomicity,我们可以使用java concurent / lock API,如果可以,请提供任何示例/链接吗?
感谢。
答案 0 :(得分:2)
如果我理解正确的问题,那么你要求:我是否有可能实现某个线程永远在CPU上运行直到完成?需要说明的是,在此期间不应该被其他线程替换。
答案是:即使它(并且我认为不是),这与原子性无关。因为如果你有多个CPU,多个线程仍然可以访问和更改相同的数据,同时所有数据都在不间断地运行。因此,即使您定义了“原子性”,您仍然会遇到并发性问题。
如果您只是想要传统意义上的线程安全,那么是的,您可以使用java-locks等来实现这一点,即使您调用本机方法也是如此。有关本机方法中java线程同步的示例,请参阅http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/sync.html。
答案 1 :(得分:1)
为了防止中断,您必须使用机器代码指令cli和sti来禁用和启用中断(在x86 / x64上)。这不是你用普通的C语言做的事情。
这是很低的水平,因为很少这样做。很大程度上因为它很少有用。主要关注点通常是与其他线程交互的行为,这就是为什么Atomic以这种方式定义的大多数用例,而不是中断的原子。
答案 2 :(得分:-1)
您对原子的定义是非标准的。这是standard definition更多。