这是一个好的和safe练习之前锁定c++对象的互斥体delete
这个对象(无需解锁)?我这样做是为了保护其他线程在这一毫秒内可能使用对象(概率非常低)。
之后内存会未分配吗?这是一个好的做法吗?
例子:
ptr_to_delete->MUTEX.lock_writing(); // can not delete session if its already locked. (additational protection)
ptr_to_delete->cleanup();
delete ptr_to_delete;
“我这样做是为了保护其他线程在这毫秒内可能使用对象”。在这种情况下,对象的互斥体是否被锁定并不重要——如果您在一个线程中删除了该对象,并且其他线程仍然有一个指向它的指针,那么may被利用了,你就会遇到麻烦。
EDIT:
还是有问题。正如 piokuc 所说,您需要在某个时刻释放和释放互斥锁,否则您的程序将会泄漏。
仍然存在工作线程和清理线程可以同时获取对象指针的情况。如果清理线程在工作线程使用对象之前删除该对象,您将得到未定义的行为(即崩溃)。
您应该为指针数组创建一个访问器函数,该函数仅在未锁定时返回指针(并在返回之前锁定它)。这样,一次只有一个线程可能拥有该指针,并且工作线程不可能获取/使用已被清理线程删除的指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)