问题遇到的现象和发生背景
嵌入式开发中,interrupt,并行都有可能使volatile的变量值发生改变,volatile可以保证有序和可见,但是没有原子性,很多时候有关原子性问题的时候都会改用synchronized,然而synchronized却无法保证避免阻塞的问题出现,而且出现指令重排也很令人头疼。我的问题是,使用volatile而不使用synchronized,如何保证原子性?
嵌入式开发中,interrupt,并行都有可能使volatile的变量值发生改变,volatile可以保证有序和可见,但是没有原子性,很多时候有关原子性问题的时候都会改用synchronized,然而synchronized却无法保证避免阻塞的问题出现,而且出现指令重排也很令人头疼。我的问题是,使用volatile而不使用synchronized,如何保证原子性?
嵌入式中的volatile你想得太多了,它只是保证程序会一定会去操作变量所对应的地址,实际上volatile还有个功能你没提到,就是读写硬件寄存器。至于你说的原子性和阻塞什么的,那应该要通过操作系统去实现吧。