当前位置: 技术问答>linux和unix
linux内核原子量操作的小疑问
来源: 互联网 发布时间:2017-03-02
本文导语: atomic_set(&s->in_write_path, 1); //原子量的操作,只会完成相应的操作不会被干扰 audio_process_dma(s); //dma传输启动 atomic_set(&s->in_write_path, 0); 为何bixatomic_set 1呢先写0是否一样,毕竟只是让CPU安心的干完这个...
atomic_set(&s->in_write_path, 1); //原子量的操作,只会完成相应的操作不会被干扰
audio_process_dma(s); //dma传输启动
atomic_set(&s->in_write_path, 0);
为何bixatomic_set 1呢先写0是否一样,毕竟只是让CPU安心的干完这个程序而已。难道是习惯或者为了和自旋锁或者信号量统一起来吗,请指教
audio_process_dma(s); //dma传输启动
atomic_set(&s->in_write_path, 0);
为何bixatomic_set 1呢先写0是否一样,毕竟只是让CPU安心的干完这个程序而已。难道是习惯或者为了和自旋锁或者信号量统一起来吗,请指教
|
原子操作的含义仅仅是:本条语句的执行过程中不可被打断;置1还是置0,与原子操作无关。
这里的置1是表明,正处于DMA传输中;置0表明,DMA传输结束了。
这里的置1是表明,正处于DMA传输中;置0表明,DMA传输结束了。
|
楼主理解不对。因为,普通的一条C语句,可能需要多条汇编语句来实现。原子操作要求:
一条或多条指令序列的执行过程不可分。即其他进程不能看到其中间状态,或者中断其操作。
你给的例子中,仅仅是实现置1或置0的语句是原子操作(即第1条和第3条语句是原子操作);而第2条DMA语句,没有说是原子操作。