Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+;中安全地删除posix计时器+;?_C++_Multithreading_Timer_Posix - Fatal编程技术网

C++ 如何在c+;中安全地删除posix计时器+;?

C++ 如何在c+;中安全地删除posix计时器+;?,c++,multithreading,timer,posix,C++,Multithreading,Timer,Posix,我正在编写的类包含posix计时器和这些计时器的处理程序 如何安全地删除该类?如果处理程序触发并看到该类被删除,则它会出错 添加互斥导致死锁-所以我想知道在一个多线程环境中是否有任何关于在一个C++类中安全使用POSIX定时器的资源。< /P> < P>将定时器ID存储为类的私有成员,永远不返回ID,但总是将调用它们的调用封装在类的方法中,并在析构函数中,调用timer\u delete()()。这样,任何代码都不能保存已失效的计时器ID。简言之,得墨忒尔定律 您对死锁的引用意味着问题在于线程同

我正在编写的类包含posix计时器和这些计时器的处理程序

如何安全地删除该类?如果处理程序触发并看到该类被删除,则它会出错


添加互斥导致死锁-所以我想知道在一个多线程环境中是否有任何关于在一个C++类中安全使用POSIX定时器的资源。< /P> < P>将定时器ID存储为类的私有成员,永远不返回ID,但总是将调用它们的调用封装在类的方法中,并在析构函数中,调用

timer\u delete()
()。这样,任何代码都不能保存已失效的计时器ID。简言之,得墨忒尔定律


您对死锁的引用意味着问题在于线程同步,因此
shared\u ptr
可能是解决方法。这将仅在删除对该类对象的最后一个引用时删除该类对象。您可以尝试其他方法,例如在屏障或条件变量后面同步线程,并且仅当您知道持有对象引用的每个线程当前正在等待或读写器锁定时才删除线程。

将计时器ID存储为类的私有成员,决不返回ID,但是,始终在类的方法中包装使用它们的调用,并在析构函数中调用
timer\u delete()
()。这样,任何代码都不能保存已失效的计时器ID。简言之,得墨忒尔定律


您对死锁的引用意味着问题在于线程同步,因此
shared\u ptr
可能是解决方法。这将仅在删除对该类对象的最后一个引用时删除该类对象。您可以尝试其他方法,例如在屏障或条件变量后面同步线程,并且仅当您知道持有对象引用的每个线程当前正在等待或读写器锁定时才删除线程。

看看boost::asio。问题已经为您解决。您需要发布一些代码。请查看boost::asio。问题已经为您解决。您需要发布一些代码。