首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"InterlockedExchange“表示字符串

"InterlockedExchange“表示字符串
EN

Stack Overflow用户
提问于 2011-01-12 18:41:32
回答 4查看 694关注 0票数 0

我需要一个等价于InterlockedExchange的函数,我可以用它将一个字符串赋值给string。此等效项应在c++中可用。我知道我可以开始实现我自己的基于互斥锁的解决方案了,但我想知道是否有现成的和优雅的解决方案。

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2011-01-12 18:50:07

恐怕不行。InterlockedExchange的全部意义在于,它(以原子方式)处理单个32位或64位(64位版本)值。字符串涉及内存分配、内存复制和边界检查,因此无法以这种方式实现。

我估计,最接近的方法是交换两个字符串指针,这样它们就指向不同的东西(已经分配了)。但即便如此,您如何知道该字符串的内容未被写入?

票数 5
EN

Stack Overflow用户

发布于 2011-01-12 18:50:20

如果您可以存储指向字符串的指针,则可以进行指针的互锁交换。不过,您需要使用某种锁来交换实际的字符串。

票数 1
EN

Stack Overflow用户

发布于 2011-01-12 19:27:24

你可以有一个不可改变的引用计数的string类,使用boost::shared_array作为底层类型甚至boost::shared_ptr< const std::string >很容易实现。(在执行此操作时,我通常会为短字符串设置一个固定大小的缓冲区)。

当你赋值时,“联锁交换”可以用在shared_ptr的引用计数的增量中。实际上,boost::shared_ptr已经支持这一点,所以你不需要自己写任何东西。

当我说string类是不可变的时,我的意思是你不能直接修改其中的字符串。但是,您可以提取std::string的副本,对其进行修改,然后将新的实际字符串附加到该类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4667824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档