2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【zz】陈硕:当析构函数遇到多线程──C++ 中线程安全的对象回调

【zz】陈硕:当析构函数遇到多线程──C++ 中线程安全的对象回调

时间:2018-12-21 09:22:59

相关推荐

【zz】陈硕:当析构函数遇到多线程──C++ 中线程安全的对象回调

需要解决的问题:析构对象时,如何可知另外的线程正在执行对象的成员的成员函数?如果保证,执行成员函数期间,对象不会再另外的线程被析构调用某个对象的成员函数之前,如何得知对象或者?对象创建:构造时不要泄露this指针不要在构造函数中注册任何回调也不要在构造函数中把 this 传给跨线程的对象即便在构造函数的最后一行也不行对象析构: 析构函数会毁掉互斥量

解决这问题关键是共享指针

shared_ptr 对于编写线程安全的 C++ 程序是至关重要的

常见的,使用互斥锁:

Mutex 这种 要保证多个函数的临界区不重叠Mutex 只能保证函数一个接一个地执行MutexLock是Mutex的封装Mutex 封装临界区( Criticalsecion) ,这是一个简单的资源类,用 RAII 手法 [CCS:13]1

封装互斥器的创建与销毁。临界区在 Windows 上是 CRITICAL_SECTION,是可重入的; 在

Linux 下是 pthread_mutex_t,默认是不可重入的。 Mutex 一般是别的 class 的数据成员。

MutexLock 封装临界区的进入和退出,即加锁和解锁。 MutexLock 一般是个栈上对象,

它的作用域刚好等于临界区域。它的构造函数原型为 MutexLock::MutexLock(Mutex&m);

这两个 classes 都不允许拷贝构造和赋值

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。