Tag:

FileStream保存文件然后立即在.NET中解锁?

我有这个代码保存pdf文件。 FileStream fs = new FileStream(SaveLocation, FileMode.Create); fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length); fs.Flush(); fs.Close(); 它工作正常。 但是,有时它不会立即释放锁定,并导致文件锁定exception,并且在此次运行后运行函数。 在fs.Close() 之后是否有理想的方法来释放文件锁

互锁和记忆障碍

我有一个关于以下代码示例的问题( m_value不是volatile,每个线程都在一个单独的处理器上运行) void Foo() // executed by thread #1, BEFORE Bar() is executed { Interlocked.Exchange(ref m_value, 1); } bool Bar() // executed by thread #2, AFTER Foo() is executed { return m_value == 1; } 在Foo()中使用Interlocked.Exchange是否保证在执行Bar()时,我会看到值“1”? (即使该值已经存在于寄存器或缓存行中?)或者在读取m_value的值之前是否需要设置内存屏障? 另外(与原始问题无关),声明一个volatile成员并通过引用InterlockedXX方法传递它是合法的吗? (编译器警告通过引用传递volatile,所以在这种情况下我应该忽略警告吗?) 请注意 ,我不是在寻找“更好的做事方式”,所以请不要发布建议完全替代方式(“使用锁定”等)的答案,这个问题来自于纯粹的兴趣..

我可以阻止StreamReader在使用时锁定文本文件吗?

StreamReader在读取文本文件时会锁定它。 我可以强制StreamReader以“只读”或“非锁定”模式工作吗? 我的解决方法是将文件复制到临时位置并从那里读取,但我更愿意直接使用StreamReader。 任何替代建议? 背景: 我写了一个小应用程序来从日志文件中获取一些统计信息。 该文件不断被外部程序更新(每秒几次),可以调用AAXXYY。 查看输出表明我的应用程序可能正在锁定文件并阻止AAXXYY写入。 这就是我正在做的事情 private void btnGetStats_Click(object sender, EventArgs e) { int countStarts = 0; int countEnds = 0; IList sessions = new List(); using(StreamReader stRead = new StreamReader(openFileDialog1.FileName,Encoding.Unicode)) { while(!stRead.EndOfStream) { string line = stRead.ReadLine(); if(line.Contains(“Session start”)) { countStarts++; sessions.Add(line.Substring(line.IndexOf(“[“), line.LastIndexOf(“]”) – line.IndexOf(“[“))); } if (line.Contains(“Session end”)) { countEnds++; […]

可以锁定(等待)免费双向链表吗?

用C#标签提出这个问题,但是如果可能的话,应该可以使用任何语言。 是否可以使用Interlocked操作实现双向链表以提供无等待锁定? 我想插入,添加和删除,并清除,而不是等待。