首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制内存时检测到的StringTemplate可能的I/O竞争状态

复制内存时检测到的StringTemplate可能的I/O竞争状态
EN

Stack Overflow用户
提问于 2015-03-17 13:10:59
回答 2查看 7.8K关注 0票数 1

喂,

在我的项目中,我使用Antlr.StringTemplate.StringTemplateGroup类来创建本地化模板。我访问.st文件并按如下所示设置所需的属性。

代码语言:javascript
复制
public StringTemplate WrapValuesReportTemplateContent(   
   private StringTemplateGroup StringTemplateGroup = new StringTemplateGroup(StringTemplateGroupName);     

   StringTemplate stringTemplate = this.StringTemplateGroup.GetInstanceOf(path);

   stringTemplate.SetAttribute("atr1", value1);
   stringTemplate.SetAttribute("atr2", value2);

   return stringTemplate
)

管理器重复使用该类,因此触发了以下异常。

代码语言:javascript
复制
    System.IndexOutOfRangeException: Probable I/O race condition detected while copying memory. The I/O package is not thread safe by default. In multithread applications, a stream must be accessed in a thread-safe way, such as a thread-safe wrapper returned by TextReader's or TextWriter's Synchronized methods. This also applies to classes like StreamWriter and StreamReader.
   at System.Buffer.InternalBlockCopy(Array src, Int32 srcOffsetBytes, Array dst, Int32 dstOffsetBytes, Int32 byteCount)
   at System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count)
   at System.IO.TextWriter.WriteLine(String value)
   at System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
   at Antlr.StringTemplate.ConsoleErrorListener.Error(String s, Exception e)
   at Antlr.StringTemplate.StringTemplate.BreakTemplateIntoChunks()

我是StringTemplate的新手,我不清楚StringTemplates到底是如何工作的。从错误描述中,我了解到.st资源没有关闭。我有以下问题:

  1. 创建新的StringTemplate时,我们创建一个用于写入和读取.st文件的流,或者创建一个修改属性的新对象
  2. 打开.st文件后,一旦超出作用域,它会自动关闭吗?
  3. 如何最好的方法来避免这个错误。我们应该在资源上使用锁,还是将所有的内容都封装在使用中?

任何澄清都是非常有用的。谢谢

EN

Stack Overflow用户

发布于 2015-08-19 14:47:36

我最近遇到了同样的错误!看看您的堆栈跟踪:它是从ConsoleErrorListener抛出的。简而言之,抛出异常是因为两个线程试图写入Console.Out流。若要消除此错误,应重写模板的错误处理程序。

标记为答案的解决方案将有效,但会出现太多的锁争用。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29099980

复制
相关文章

相似问题

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