并行写入 eventfd 安全吗?

并行写入 eventfd 安全吗?

eventfd我有一个多线程环境,因此可以进行并行写入。并行写入eventfd安全吗?有没有任何官方文档可以解释eventfd.

答案1

如果您查看内核源代码(此处为 5.4.48),您可以找到处理读取/写入 eventfd 文件描述符的函数的实现:

// fs/eventfd.c

static ssize_t eventfd_read(struct file *file, char __user *buf, size_t count,
                            loff_t *ppos)
{
        struct eventfd_ctx *ctx = file->private_data;
        ...
        spin_lock_irq(&ctx->wqh.lock);

static ssize_t eventfd_write(struct file *file, const char __user *buf, size_t count,
                             loff_t *ppos)
{
        struct eventfd_ctx *ctx = file->private_data;
        ...
        spin_lock_irq(&ctx->wqh.lock);

该实现具有内部锁定,这将使其线程安全。

相关内容