Tag: primefaces

并发File.Move是同一个文件

有人明确指出File.Move是primefaces操作:File.Move的primefaces性 。 但是,以下代码段会导致多次移动同一文件的可见性 。 有谁知道这段代码有什么问题? using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; namespace FileMoveTest { class Program { static void Main(string[] args) { string path = “test/” + Guid.NewGuid().ToString(); CreateFile(path, new string(‘a’, 10 * 1024 * 1024)); var tasks = new List(); for (int i = 0; i { try { string newPath = […]

对.NET中未对齐字段的读写是绝对primefaces的吗?

C#规范( ECMA-334和ISO / IEC 23270 )有一段关于读写的primefaces性: 12.5变量引用的primefaces性 以下数据类型的读取和写入应为primefaces:bool,char,byte,sbyte,short,ushort,uint,int,float和reference类型。 此外,在前一个列表中具有基础类型的枚举类型的读取和写入也应该是primefaces的。 其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不必是primefaces的。 但我很难想象永远是真的。 例如,我可以使用StructLayout属性布局结构,并强制字段不对齐: // sizeof(MyStruct) == 9 [StructLayout(LayoutKind.Sequential, Pack = 1)] struct MyStruct { public byte pad; // Offset: 0 public int value1; // Offset: 1 public int value2; // Offset: 5 } 现在,当我这样做时,我认为对int的写入不是primefaces的,因为它没有与自然边界对齐: MyStruct myStruct = new MyStruct(); myStruct.value1 = 20; 那么,它是绝对primefaces的(就像规范所说的那样),还是不能保证是primefaces的(例如在x86上)? 无论哪种方式,你有任何来源支持这一点吗?

如何在C#中进行primefaces写入/追加,或者如何使用FILE_APPEND_DATA标志打开文件?

在大多数Unix和Posix符合操作系统下,使用O_APPEND执行open()操作系统调用向OS指示写入是primefaces追加和写入操作。 出现这种情况,对于本地文件系统,当您执行写操作时,您知道它会附加到文件的末尾。 Windows操作系统通过将适当参数中的FILE_APPEND_DATA传递给Win32 CreateFile()系统调用来支持相同的function。 引用: http://www.google.com/search?q=msdn+createfile or: http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx http://www.google.com/search?q=msdn+IoCreateFileSpecifyDeviceObjectHint or: http://www.google.com/search?q=msdn+IoCreateFileSpecifyDeviceObjectHint 我的问题是,我无法确定如何使用Net Framework库在C#下获得此行为,有没有办法使用Net Framework获取此类行为? 顺便说一句,我不相信使用FileMode.Append会给出这样的行为。

原始数据类型是c#atomic(线程安全)吗?

例如,multithreading时是否需要锁定bool值?

为什么Interlocked.Add没有超载接受双打作为参数?

我完全理解Threading.Interlocked类提供的primefaces性; 但是,我不明白为什么Add函数只提供两个重载:一个用于Integers,另一个用于Longs。 为什么不双打,或任何其他数字类型? 显然,更改Double的预期方法是CompareExchange; 我认为这是因为修改Double比修改Integer更复杂。 我还不清楚为什么,如果CompareExchange和Add都能接受整数,他们也不能同时接受双打。

IEnumerable Linq方法是否是线程安全的?

我想知道Linq扩展方法是否是primefaces的? 或者,在进行任何类型的迭代之前,我是否需要lock线程中使用的任何IEnumerable对象? 将变量声明为volatile是否会对此产生影响? 综上所述,以下哪项是最好的,线程安全,操作? 1-没有任何锁: IEnumerable _objs = //… var foo = _objs.FirstOrDefault(t => // some condition 2-包括锁定语句: IEnumerable _objs = //… lock(_objs) { var foo = _objs.FirstOrDefault(t => // some condition } 3-将变量声明为volatile: volatile IEnumerable _objs = //… var foo = _objs.FirstOrDefault(t => // some condition