小编Wil*_*mer的帖子

内存屏障在无锁队列中使用

我最近阅读了Paul McKenney的2010年白皮书"内存障碍:软件黑客的硬件视图".

我非常感谢关于下面给出的一小部分C代码的反馈/评论/指导,这些代码实现了M&S队列排队功能,特别是在内存和编译器障碍方面.

此代码使用指针计数器对来处理ABA,并且为了这篇文章,应该被认为是为x86/x64编写的.

对于这篇文章,内联评论现在都写完了,并且是这篇文章的一部分,因为它们表达了我现在的想法.

为简洁起见,我在结构中删除了断言代码和缓存行填充等.

目前,我认为代码很破碎,但我想确保我认为正确的原因.


#define PAC_SIZE 2

struct lfds_queue_element
{
  struct lfds_queue_element
    *volatile next[PAC_SIZE];

  void
    *user_data;
};

struct lfds_queue_state
{
  struct lfds_queue_element
    *volatile enqueue[PAC_SIZE];

  struct lfds_queue_element
    *volatile dequeue[PAC_SIZE];

  atom_t volatile
    aba_counter;
};

void lfds_queue_internal_dcas_pac_enqueue( struct lfds_queue_state *lqs, struct lfds_queue_element *lqe )
{
  ALIGN(ALIGN_DOUBLE_POINTER) struct lfds_queue_element
    *local_lqe[PAC_SIZE], *enqueue[PAC_SIZE], *next[PAC_SIZE];
  unsigned char cas_result = 0;
  unsigned int backoff_iteration = 1;

  /* TRD : here we have been passed a new element to place
           into the …
Run Code Online (Sandbox Code Playgroud)

c concurrency 64-bit lock-free memory-barriers

16
推荐指数
1
解决办法
1348
查看次数

如何在json中包含php变量并传递给ajax

我的守则

var json = xmlhttp.responseText; //ajax response from my php file
obj = JSON.parse(json);
alert(obj.result);
Run Code Online (Sandbox Code Playgroud)

在我的PHP代码中

 $result = 'Hello';

 echo '{
        "result":"$result",
        "count":3
       }';
Run Code Online (Sandbox Code Playgroud)

问题是:当我发出警报时obj.result,它会显示"$result",而不是显示Hello.我怎么解决这个问题?

javascript php ajax json

3
推荐指数
2
解决办法
1万
查看次数

如何设置ffmpeg队列?

我试图在我的服务器上编码很多视频,但FFMPEG是资源密集型的,所以我想设置某种形式的排队.我的网站的其余部分使用PHP,但我不知道我是否应该使用PHP,Python,BASH等.我在想我可能需要使用CRON,但我不确定如何告诉ffmpeg启动一个新任务(从列表中)完成之后的任务.

queue bash cron ffmpeg batch-processing

3
推荐指数
1
解决办法
5031
查看次数

为什么这发生在c?

void xstrcpy ( char *t, char *s );

void main(void ) {      
    char source[ ] = "Sayonara" ;
    char target[20] ;
    xstrcpy ( target, source ) ;   
    printf ( "\nsource string = %s", source);
    printf ( "\ntarget string = %s", target ) ; 
}

void xstrcpy ( char *t, char *s ) {  
    while ( *s != '\0' ){
        *t = *s ;    
        t++ ; s++ ;
    } 
    *t = '\0' ;
} 
Run Code Online (Sandbox Code Playgroud)

这段代码给出了输出:

source string = Sayonara 
target string …
Run Code Online (Sandbox Code Playgroud)

c

-1
推荐指数
1
解决办法
121
查看次数