gpt4 book ai didi

C++删除对象,它会锁定吗?

转载 作者:太空狗 更新时间:2023-10-29 21:11:46 27 4
gpt4 key购买 nike

使用 C++,当我创建一个新对象时,“new”关键字会进行一些锁定(因为它会进行一些内存分配等)。所以,我不能直接在无锁软件中使用它。

但是,“delete”关键字是否会创建任何类型的锁?

我仍在使用 C++98,我认为它在 C++11 中的工作方式相同;

最佳答案

如您所说,new 中锁定的原因是内存分配。如果分配需要锁,则很有可能,至少在某些情况下,相应的取消分配也需要锁。取消分配当然有可能是无锁的,即使分配需要锁。

请注意,delete 本身不执行锁定(new 也不执行),它是底层原语执行的。因此,如果您有一个无锁分配器,那么使用 newdelete 应该没有问题。 [当然,假设构造函数和析构函数是无锁的]。

请注意放置形式 newdelete 不应锁定。

避免 newdelete(或至少分配)可能还会限制您可以做的大量事情。例如,除 std::array(在 C++11 中)之外的所有容器都将执行分配,因此没有 std::vectorstd::stringstd::map 等。许多构造函数为创建的对象执行分配。当然,除了 newdelete 之外的其他函数也可能有锁 - I/O 函数通常有锁以防止完全乱码输出(但不一定保证整个输出也不要乱码)。几乎任何使用公共(public)共享资源的东西都可能在某个级别上有锁,无论是在操作系统内部还是在用户模式级别。

C++ 标准在这方面并没有真正说明什么,它是一个实现细节。

关于C++删除对象,它会锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com