首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPset线程安全吗?

IPset线程安全吗?
EN

Stack Overflow用户
提问于 2014-01-29 06:31:53
回答 1查看 337关注 0票数 1

我想知道使用ipset添加/删除条目是否线程安全。例如,如果有两个并发进程执行这些操作

代码语言:javascript
复制
ipset -A myset 1.1.1.1 # process 1's operation
ipset -A myset 2.2.2.2 # process 2's operation

我是否需要添加一个同步机制来确保运行的第二个进程等待第一个进程完成,以避免以某种方式破坏我的ipset (例如,在我的IPset中以1.2.1.2结束),还是这个功能已经由ipset提供了?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-31 09:14:26

不-您不需要为此在用户空间中添加任何锁定机制。内核模块代码已经在每个集合周围有一个锁,在添加和删除操作中被写锁定。

下面是ipset内核模块的相关代码。注意写锁&解锁。

代码语言:javascript
复制
static int
call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set,
        struct nlattr *tb[], enum ipset_adt adt,
        u32 flags, bool use_lineno)
{
        int ret;
        u32 lineno = 0;
        bool eexist = flags & IPSET_FLAG_EXIST, retried = false;

        do {
                write_lock_bh(&set->lock);
                ret = set->variant->uadt(set, tb, adt, &lineno, flags, retried);
                write_unlock_bh(&set->lock);
                retried = true;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21423725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档