[英]C++: Mutex and deallocation
我正在编写一个小程序作为大学课程的一部分。 在这个程序中,我有一个全局 Boost Mutex,它可以帮助我协调两个线程。
在我的小型库中,我必须编写一个清理程序 function ,当调用它时,它会自行清理。
我现在要问的是:如果我创建了一个 Mutex,我是否应该在不再需要它时也将其释放?
我使用的代码很简单
boost::mutex mymutex;
非常感谢
当用完由花括号定义的 scope 时,它将被释放。 您应该小心解锁互斥锁。
Boost 互斥锁似乎被编写为在其析构函数中执行所有清理。 如果您想准备好相同的互斥锁以供重用,可能您想在其上调用.unlock()
一次。
如果您真的觉得需要手动摆脱它,我想您可以将其设为指针并使用new
的 . 这样,您可以通过在指针上调用delete
来手动控制其析构函数在清理例程中的运行。 但是,指针很容易出错,因此使用指针只是为了显示它被手动清理(而不是在程序结束时 object 退出 scope 时自动发生)是愚蠢的。 如果您因为不这样做而被扣分,我认为为正确设计事物付出的代价很小。
如果你真的担心因为不手动清理自动销毁的资源而失去积分,如果我是你,我会 go 询问我的导师我需要做什么。 学校不是免费的(不像 SO),这样的咨询是你付给他们所有钱的一部分。 还不如从中获得一些价值。
没有。 C++ 中的对象会自行清理。 如果您使用new
动态分配了互斥锁,则只需要清理它。
在清理 function 时,您可能需要调用boost::mutex
object 的释放/重置方法,以确保您没有将其留在有信号的 state 中。
@Danilo:我很确定该课程不需要您使用 boost,并且老师希望您直接使用 pthreads API。
在这种情况下,您需要调用pthread_mutex_init
和pthread_mutex_destroy
, boost 会自动为您执行
当您定义一个 object(与指针相对)时,例如在 --
boost::mutex mymutex;
-- C++ 将在 object 超出 scope 时调用对象的析构函数。
您现在需要做的是检查 boost::mutex 的文档,了解调用 d'tor 时它会做什么。 但是,您可以非常确定 boost 中的任何 class 都会清理其 dtor 中的资源(毕竟这就是 dtor 的用途)。 如果不检查文档,您不知道 Mutex 的行为是什么。 它是 lock() function 是在调用 dtor 时。
由于您有一个全局 object,它的 dtor 将在 main() 返回后被调用,就资源释放而言应该没问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.