Chinaunix

标题: __sync_lock_test_and_set [打印本页]

作者: finyren    时间: 2014-11-19 13:06
标题: __sync_lock_test_and_set
本帖最后由 finyren 于 2014-11-19 13:08 编辑

type __sync_lock_test_and_set (type *ptr, type value, ...)
   将*ptr设为value并返回*ptr操作之前的值。

网上的解释如上,那这个函数名中的“test"有什么涵义了,在实际情况下怎么用了?

网上有段开源代码是这么用的:
static inline void lkf_node_put(struct lkf_list* list, struct lkf_node* node)
{
    struct lkf_node** ptr = __sync_lock_test_and_set(&(list->tail), &(node->next));
    *ptr = node;
}

意识就是将node插入链表的尾端,这是怎么实现的?
作者: folklore    时间: 2014-11-19 13:33
就是多线程/多进程的原子操作, Google原子操作





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2