ChinaUnix.net
相关文章推荐:

atomic64t

atomic64_inc

by mordorwww - 内核源码 - 2013-10-30 11:28:02 阅读(1075) 回复(4)

相关讨论

static inline void atomic_add(int i, atomic_t *v) { asm volatile(LOCK_PREFIX "addl %1,%0" : "=m" (v->counter) : "ir" (i), "m" (v->counter)); } 为什么要弄个%2 ? 没道理啊, 没有任何约束表明第二个"m"和第一个"m"是同一个, 而且指令中完全没有使用%2。 why?

by albcamus - 内核源码 - 2008-11-19 10:20:50 阅读(4333) 回复(17)

请教大家一个问题, typedef struct { volatile int counter; } atomic_t; #define atomic_INIT(i) { (i) } #define atomic_read(v) ((v)->counter) #define atomic_set(v,i) (((v)->counter) = (i)) 原子读操作定义如上,但是我觉得没有做什么操作,只是返回v的counter字段值,具体是怎样保证atomic_read是原子读的呢? 关键字 volatile 也不能起到不被中断的作用吧。

by tianhailong - C/C++ - 2010-04-02 16:00:52 阅读(5205) 回复(13)

请教大家一个问题, typedef struct { volatile int counter; } atomic_t; #define atomic_INIT(i) { (i) } #define atomic_read(v) ((v)->counter) #define atomic_set(v,i) (((v)->counter) = (i)) 原子读操作定义如上,但是我觉得没有做什么操作,只是返回v的counter字段值,具体是怎样保证atomic_read是原子读的呢? 关键字 volatile 也不能起到不被中断的作用吧。

by tianhailong - 内核源码 - 2012-06-14 13:52:21 阅读(13407) 回复(15)

我在下面的vmdk_transfer中进行IO操作 可是出现scheduling while atomic ,下面是主要的代码,还有系统打出来的log 我觉得问题出在这里: bio_for_each_segment(bvec, bio, i) { char *buffer = __bio_kmap_atomic(bio, i, KM_USER0); vmdk_transfer(dev, sector, bio_cur_sectors(bio), buffer, bio_data_dir(bio) == WRITE);//4.我想问的是这里不能引发调度么? sector += bio_cur_sectors(bio); __bio_kunmap_atom...

by 1226ehziy - 内核源码 - 2010-01-22 12:12:48 阅读(11606) 回复(8)

这里有一个很重要的概念:boundary (边界) 常见的 boundary: ★ word boundary(16 位) ★ doubleword boundary(32 位) ★ quadword boundary(64 位) --------------------------------------------------------------------------------- 1、造成这些 boundary 的原因是:data bus width (数据线的宽度)   对于 processor 这里有一个很重要的分界点,以 Pentium 处理器为分界,在 Pentium 之前的 data bus 是 32...

by mik - 内核源码 - 2012-12-02 09:31:31 阅读(10737) 回复(15)

本来说atomic操作都是原子的,但是我真的是弄不清楚,从atomic_inc_and_test的定义来看,他怎么会是不可中断的呢,定义如下: static __inline__ int atomic_inc_and_test(atomic_t *v) { unsigned char c; __asm__ __volatile__( LOCK_PREFIX "incl %0; sete %1" :"+m" (v->counter), "=qm" (c) : : "memory"); return c != 0; } 在smp中lock_prefiX被...

by wojiaohesen - 内核源码 - 2008-04-11 13:15:17 阅读(8676) 回复(20)

对于OpenMP的atomic子句: #pragma omp atomic model_->phi[word][k] -= count*document.topic_assignments_->mu_topics_[token][k]; atomic是否对类不支持,以上子句是否有效? 如果不适应,是否有方法对model_->phi[word][k]进行互斥加锁?请大侠们给予解答,谢谢!

by guyiqing - C/C++ - 2012-04-27 09:35:55 阅读(1121) 回复(0)

Linux版x86平台的atomic_read的实现如下: static inline int atomic_read(const atomic_t *v) { return (*(volatile int *)&(v)->counter); } 我想知道为什么要强制转换成指针又重读了一次?

atomic_read

by csuwzc - 内核源码 - 2011-11-12 08:45:19 阅读(1881) 回复(2)

[code]void * kmap_atomic(struct page * page, enum km_type type) { enum fixed_addresses idx; unsigned long vaddr; current_thread_info( )->preempt_count++; if (!PageHighMem(page)) return page_address(page); idx = type + KM_TYPE_NR * smp_processor_id( ); vaddr = fix_to_virt(FIX_KMAP_BEGIN + idx); set_pte(kmap_pte-idx, mk_pte(page, 0x063)); _ _flush_tlb_single(vaddr); return (void *) vaddr; }[/code]以...

by stuman - 内核源码 - 2016-04-13 16:57:53 阅读(1490) 回复(7)

typedef struct { volatile int counter; } atomic_t; 直接定义为整型不就可以了,为什么套在结构体中?

by xparmenides - 内核源码 - 2011-12-15 12:17:13 阅读(5748) 回复(5)