我关注了以下网页:
http://www.1024cores.net/home/lock-free-algorithms/reader-writer-problem/improved-lock-free-seqlock
来源如下:
struct data_t
{
int seq; // sequence number
int data [1024]; // user data
};
struct seqlock_t
{
data_t* current;
data_t pool [16]; // 16 user objects are held
};
seqlock_t sl;
结构很简单,让我困惑的是:
data_t* d0 = sl.current; // load-consume
int idx = (sl.current - sl.pool + 1) % 16;
data_t* d = &sl.pool[idx];
是sl.current
一个指针,sl.pool
是吗?current-pool 可以实现什么?鉴于c language
此,我该如何解释这种说法?
int idx = (sl.current - sl.pool + 1) % 16;
编辑 :
感谢您提供所有信息,它有很大帮助!在我自己的编码风格中会使用 int idx = (sl.current - &[sl.pool[0]) + 1) % 16; 现在我知道 &(sl.pool[0]) 与 sl.pool 相同!我应该弄清楚,下面的例子,我之前读过的,显示指针/数组....
void display(int *p)
{
int idx ;
printf("(%d)(%d)\n",*p,p[1]) ;
}
int main()
{
int i,Arr[10] ;
for(i=0;i<10;i++)
Arr[i] = i + 100;
display(Arr) ;
}
是的,我可以使用 display(Arr) 和 display(&Arr[0]) ,它们是一样的~!!