2009-12-10 83 views
1

我有一个用C++编写的多线程应用程序。我正在使用互斥锁进行文件写入。我怀疑在执行该程序的某个地方,互斥体没有被释放。
所以我想知道是否有一种方法来检查互斥锁和释放文件,编程或其他方式。
我正在SuseLinux上运行代码,顺便说一句。
谢谢,检查互斥量版本

+0

问题其实是另一回事,看似愚蠢。我没有在一些构造函数中初始化一个bool变量,假设默认情况下它会被初始化为false。 现在,如果你想知道我怎么会困惑是否是由于互斥或错误初始化;好吧,如果你看了代码,我想你会明白的。无论如何,谢谢你的答案。他们很有帮助。 – rabin 2009-12-13 23:34:58

回答

8

欢迎来到调试多线程代码的美妙世界。没有灵丹妙药可以解决你的问题,但至少你应该使用成语来管理你的互斥。这意味着将互斥体封装在一个C++类中,该类声明该类的实例被创建时声明该互斥体,并在它(该类实例)被销毁时释放该互斥体。您也可以有利地记录索赔/版本,但请注意,这可能会引入计时错误和人为因素。

+2

Boost :: Threads库拥有一套非常好的便携式RAII互斥锁......可以帮助您避免因持续锁定造成的死锁。 – paxos1977 2009-12-10 20:54:36