繁体   English   中英

IPset是线程安全的吗?

[英]Is IPset thread-safe?

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

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已经提供了此功能?

谢谢!

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

这是ipset内核模块中的相关代码。 注意写锁定和解锁。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM