![]() |
1
12
如果您在支持多线程的环境中进行编码,那么您可以非常确定
虽然内存在堆上,但指向它的指针在堆栈上。只有您的线程有指向这个内存的指针,所以没有并发修改的风险——没有其他线程知道内存在哪里修改它。 只有当您将此指针传递给另一个线程时,线程安全才会出现问题,该线程将同时修改此内存,同时修改原始(或另一个)线程。 |
![]() |
2
2
它并没有说您只能使用堆栈变量,而是说使用堆变量“意味着需要仔细检查以确定它是否不安全”。
加上通常的使用建议
|
![]() |
3
1
新建和删除可能是线程安全的,也可能不是线程安全的。它们可能是,但这取决于实现。见: C++ new operator thread safety in linux and gcc 4 为了保证线程安全,函数必须要么使用堆栈变量,要么将对其他资源的访问与其他线程同步。只要从不同线程调用时对new的单独调用在堆上分配不同的空间,就可以了。 |
![]() |
NOBUD · 最大堆插入函数实现C++ 2 年前 |
![]() |
JimBelushi2 · 合并排序创建内存堆 7 年前 |
![]() |
Arda İbrahim Gökçe · 在遍历最小堆时获取垃圾值 7 年前 |
![]() |
Alexy Grabov · 查找最大堆中k个最大元素的位置 7 年前 |
![]() |
Maxxx · 使用堆在O(N log K)时间内查找前K个元素 7 年前 |
![]() |
Karthik · 限制Go堆接口实现的优先级队列的大小 7 年前 |
![]() |
mourinho · 使用数组实现最小堆[关闭] 7 年前 |