C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 线程安全传递操作符大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为我们的堆内存管理器重写new()和new []()运算符. new()有一个互斥并且是线程安全的,但是我还没有为new []()添加一个互斥,它作为一个传递操作符,因为我怀疑它在调用时会在堆栈中.新的[]()是否在堆栈中并且不需要自己的互斥量是否正确?

/*!
\brief Override the Standard C++ new [] operator
\param size [in] number of bytes to allocate
\exception std::bad_alloc
\returns Pointer to the start of the allcoated memory block of \c size bytes
\todo check if this is thread-safe or if it needs a mutex lock,return address probably is on the stack so it should be ok
*/
void *operator new[] (size_t sizE)
{
    return operator new(sizE);
}

/*!
\brief Overrides the Standard C++ new operator
\param size [in] number of bytes to allocate
\exception std::bad_alloc
\returns Pointer to the start of the allcoated memory block of \c size bytes
*/
void *operator new(size_t sizE) 
{
    MM_ENTER_CRITICAL_SECTION(CMemorymanager::muteX)
    // Memory manager code removed since it's outside of the question context
    MM_LEAVE_CRITICAL_SECTION(CMemorymanager::muteX)
}

解决方法

运算符new []()的工作方式与new()类似,但它不是分配单个对象,而是分配一个对象数组.我不知道与堆栈有什么关系,分配的对象在堆上分配,并返回指向该内存的指针.

堆栈上唯一的东西就是指针本身,但两个版本的都是这种情况.

看到new []()调用new()然后我没有看到你在New []()中需要互斥的原因,因为new()已经受到互斥锁的保护.任何调用new []()的线程都必须等待另一个已经在New()中的线程.

大佬总结

以上是大佬教程为你收集整理的c – 线程安全传递操作符全部内容,希望文章能够帮你解决c – 线程安全传递操作符所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。