2016-08-19 71 views
1

C++ 17的事务内存建议的当前状态是什么。它是否会被纳入标准,目的是被纳入未来版本的标准C++中,还是只是一个实验性的概念验证特征,其标准化状态仍未确定?标准C++事务内存状态

我在问,因为一些标准化委员会的文件似乎在这里给出了矛盾的交流。一方面,我们有P0265R0(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0265r0.pdf)表示事务性内存不会标准化,另一方面,Stroustrup有一个N4492纸(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4492.pdf),事务性内存列在C++ 17功能列表中。

回答

3

很快:事务内存TS已经发布,第二个版本正在开发中。但是,委员会并不打算将其纳入近似特征的标准中。这种选择有几个原因:

  • 没有足够的实施经验。自GCC6以来,只有g ++实现它。 TSs的目标部分是收集实现和用户体验,所以这样一个大的特点仍然“不成熟”。

  • 并不是每个目标都支持事务内存,并且它的执行成本很高,而并非每个人都需要它。由于这些原因,委员会显然不确定TS是否应该成为主要C++标准的一部分。它可能永远生活在一个TS中。此外,并不是每个人都相信事务内存TS的每个特性都值得包含在主C++标准中。有些人发现​​是主要特征,而另一些人则认为原子块是真正的游戏改变者。 TS 增加了图书馆实施者必须处理的另一认知开销(以及几个新关键词,这通常不被视为好事)。

+0

很好的答案。可惜的是,它是唯一可以组合的技术,AFAICT。基本上,并发编程与15年前相似,一切都需要从头编码(再次,因为没有可组合的东西,所以没有可重用的构建块)。 –

+0

@AmiTavory什么是事务更可组合的东西,为什么? –

+1

@JanusTroelsen假设您发现某个项目使用互斥锁或无锁基元显示了一个散列表的超酷并发算法。然后你会发现链接列表相同。然后你想使用一个哈希表和一个链表来构建一个LRU缓存。 AFAIU,这些解决方案的组合,并不是问题组合的解决方案(哈希表和列表并发是不够的,LRU状态可能不一致)。但是,使用TSM哈希表和链接列表可以简单地构建TSM LRU。 –